函数传值传参

var obj = {n:1};
(function(obj){
    console.log(obj.n); //1
    obj.n=3;
    var obj = {n:2}; // 传入参数obj 与 这里再次声明, 会形成重复声明
    console.log(obj.n) //2
})(obj);
console.log(obj.n); //3

var obj1 = {n:1};
function fn(obj1){
    console.log(obj1.n); //1
    obj1.n=3;
    obj1 = {n:2};
    console.log(obj1.n) //2
}
fn(obj1);
console.log(obj1.n); //3

var x = 1;
function a(x{
    // 形参有自己的作用域, 独立于函数外的作用域, 因此不会影响外面的x
    console.log(x);  // 1
    x = 2;
    console.log(x); // 2
}
a(x);
console.log(x); // 1

var obj2 = {n:1};
function b(obj2{
    // js传值; 对象传递的是指针(复制一份指针)
    console.log(obj2.n); // 1
    obj2.n = 2// 引用类型改变相互影响
    obj2 = {n:3}; // 将函数内部变量obj指针从{n:1}变为{n:2}; 外部obj的指针不变, 还是{n:1}
    console.log(obj2.n); // 3
}
b(obj2);
console.log(obj2.n); // 2

// 函数参数的声明相当与函数内部声明

猜你喜欢

转载自www.cnblogs.com/rencoo/p/10197555.html