js中函数参数基本类型和引用类型的区别

高级程序设计中说明,所有函数的参数都是按值传递的。

基本类型

向参数传递基本类型的值时,被传递的值会被复制给对应的命名参数

function addTen(num){
    num=+10;
    return num;
}
var count=20;
var result=addTen(count);
alert(count);

在函数内部,num的值被加上10,但不影响外部count变量的值

引用类型

在向参数传递引用类型的值时,把这个值在内存中的地址复制给对应的局部变量,如果这个局部变量没有重新赋值,那它在函数内部的变化将反应到外部

function setName(obj){
  obj.name="nichos";
}
var person={
  name:"richas"
};
setName(person);
alert(person.name);//nichos

如果被重新赋值给新的对象,这之后变化将不影响外部的变化。

function setName(obj){
  obj.name="nichos";
  obj=new Object();
  obj.name="new name";
}
var person={
  name:"richas"
};
setName(person);
alert(person.name);//nichos

下面再转个网友的个例子

 var ftn1 = function(){

        console.log("test:ftn1");

    };

    var ftn2 = function(){

        console.log("test:ftn2");

    };

    function ftn(f){

       f();

       f = ftn2;

    }

    ftn(ftn1);// 运行结果:test:ftn1

    console.log("====================华丽的分割线======================");

    ftn1();// 运行结果:test:ftn1

为什么不是test:ftn2,那是因为参数f被赋值给f2对象的地址后,跟外面的f1已经没关系了,所以结果还是f1

 var ftn1 = function(){

        console.log("test:ftn1");

    };

    var ftn2 = function(){

        console.log("test:ftn2");

    };

    function ftn(f){

       f();//test:ftn1

       f = ftn2;
       f();//test:ftn2

    }

    ftn(ftn1);// 运行结果:test:ftn1

    console.log("====================华丽的分割线======================");

    ftn1();// 运行结果:test:ftn1
上一篇:selenium爬取煎蛋网


下一篇:Struts文件下载