js形参和局部变量同名

1、js基本数据类型值传递,对象引用传递;
2、形参和内部同名变量是同一个参数;

function f1(a) {//相当于首先var a=10;
    console.log(a);// 10;  
    var a=1;
    console.log(a);// 1 
    console.log(arguments[0])// 1; 
}
f1(10)

 var x=2,y=0,z=0;
    var obj={name:'haha'};

    function add1(num){ 	
    	num=num+1;
    	return num;
    }
     function add2(num){
    	num=num+2;
    }
    function changeobj(obj){
    	obj.name='erha';
    }

    z=add1(x);
    y=add2(x);
    changeobj(obj);

    var result=add1(x)+add2(y);
    console.log('x:'+x);//2
    console.log('y:'+y);//undefined
    console.log('z:'+z);//3
    console.log(obj);
    console.log(typeof result);//number
    console.log(result);//NaN
    /*
     typeof NaN=="number"
     typeof 2==="number"
    */
 var foo = {n : 1};
      (function(foo) {
         console.log(foo.n);//1
         foo.n = 3;
         var foo = {n : 2};//新的堆地址,不影响外层foo
         console.log(foo.n);//2
      })(foo);
     console.log(foo.n);//3

你可能感兴趣的:(js形参和局部变量同名)