码迷,mamicode.com
首页 > 编程语言 > 详细

javascript学习记录-2-18

时间:2016-02-19 10:29:18      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

变量类型,函数类型(传参)

js的变量有按值和引用传递,而参数只能按值来传递;
function addTen(num){
 num+=10;
return num;
}
var count =20;
var result=addTen(count);
 
console.log(count);  //结果为20,当作参数传入函数,在函数内执行+操作,但是不会影响外围的count的值;
console.log(result);  //结果为30,调用函数后函数抛出执行+10后的结果
 
 

function setName( obj){
                       obj.name="nihao" ;
                       var obj=new Object();
                }
                 var person=new Object();
                setName(person);
                 console.log(person.name);   //结果为nihao
引用类型的传递,
 
 

function setName( obj){
                       obj.name="nihao" ;
                       var obj=new Object();
                       obj.name="hello" ;
                       obj.age="22" ;
                }
                 var person=new Object();
                setName(person);
                 console.log(person.name);
                 console.log(person.age);
 
这个函数说明如果函数传参如果是按引用传递的话那么person的值便会更新为hello,这说明即使在函数内修改了参数的值,但是原始的引用仍然保持未变,在obj重写后,此obj便成了局部变量。
 

类型检测-执行环境及作用域
console.log(person instanceof Function);    //检测类型,instanceof 查询person是否是Function,返回的是布尔值,所有引用类型都是object
 
一般的话习惯用的是typeof
 
然后检测某个引用是否是数字类型的话可以用   isNaN
 
 

var color= "blue";
                  function changeColor(){
                       var anotherColor= "red";
                      function swapColor(){
                            var tempColor= anotherColor;
                            console.log("1:::::" +tempColor);   //tempColor:red
                            anotherColor=color;                 //color:blue
                            console.log("2:::::" +anotherColor);  //anotherColor:blue
                            color=tempColor;     //color=tempcolor=red
                            console.log("3:::::" +color); // color: red
                            console.log("4:::::" +tempColor); //tempColor:red
                            console.log("5:::::" +anotherColor);  //anotherColor:blue
                      }
                     swapColor();
                }
                changeColor();
 
凌乱~
 
注意:函数一般只能内向外访问,如果需要由外往内访问的话,需要内部抛出或延长作用域链
 
 

function builderUrl(){
                       var qs= "?debug=true";
                      with(location ){
                            var url= href+qs;
                            console.log(href);  //结果为当前url地址
                            console.log(qs);    //结果为当前url地址+qs的结果
                            console.log("111" +qs);    //结果qs的结果
                            console.log("111" +location.href);    //结果为当前url地址的结果
                      }
                     
                      //with的作用是 ------当你有一个对象的多个属性或者方法需要操作时,就可以使用with,此处的with块相当于:-
                      /*
                      
                     */
                     
                      return url;
                }
                 console.log(builderUrl());
                 console.log(window .location.href); //结果为当前url地址
 
这里的with没怎么看懂,百度的结果是:文中有声明的时候自动调用,
 
----- with 语句可以用来引用某个特定的对象中已有的属性,但是不能用来给对象添加属性,要给对象添加属性,还要明确的引用该对象。
 
建议一般不要用with
 
技术分享
 

function add( na1,na2 ){
                     sum =na1+ na2;
                      console.log(sum);
                }
                 console.log(add(1 ,2));
 
由于add函数没有抛出sum所有外围的加法是没法从add函数传出的,只在函数内部执行
 
注意:此处的sum为全局变量
 
如果sum为局部变量的话那么即使在add中抛出sum在外围也是无法调用的。
 
var sum;
                 function add( na1,na2 ){
                      sum =na1+ na2;
                      console.log(sum);  //3
                      return sum;
                }
                 console.log(add(1 ,2));//3
                  console.log(sum);  //3
 
外围声明全局后,也可以存储sum的值,所以最后输出的值为3.
 
 

var color= "blue";
            function getColor(){
                 return color;
            }
            console.log(getColor()); //blue   ---标识符搜索
 
 

垃圾回收机制,只需要稍微了解下。
 

引用类型
对象定义的几种方法:
var  person=new Object();
person.name="111";
person.age=22;
var person={
  name:"111",
  age:22
}
var person={};
person.name="111";
person.age=22;
 

对象也可以用数值属性,但是数值属性会自动转化为字符串类型。
 
 

 
 
function displayInfo( args){
                     var output ="";
                     if( typeof args.name== "string"){
                            output+="Name:" +args.name+ "\n";
                     }
                     if( typeof args.age== "number"){
                            output+="Age:" +args.age+ "\n";
                     }
                      console.log(output);
                 }
                 displayInfo({
                     name :"jl",
                     age: 22
                 });
                 displayInfo({
                     name: "11",
                     age :11
                  });
//Name:jl
//Age:22
//Name:11
//Age:11
//相当于封装函数了吧?
 

Array类型
 
var color=new Array(3);
var name=new Array("hello");   //创建一个包含字符串hello的数组
 
检测数组除了之前的instanceof
外在es5后新增了Array.isArray()方法         //isArray支持ie9+
 
 

数组也提供了类似于栈的操作,
 
var a=new Array();
var b=a.push("red","blue");
//向后添加两个参数到a数组,b输出数组长度2,a输出["red","blue"]
 
 
var c = a.pop();
 
//输出的c为blue(取出了最后一个,且返回) ,a的值为["red"]
 
//栈方法的(栈数据结构)的访问规则是后进先出,而队列方法的数据结构访问规则是先进先出
 
 
 
 
 
 
 
 
 
 
 
 

javascript学习记录-2-18

标签:

原文地址:http://www.cnblogs.com/jldiary/p/5199849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!