关于作用域问题

var a=10;   
function f1(x){
    x++
    return x
    }
f1(a)
console.log(a)//为什么函数没有把a修改了呢。

阅读 2.9k
6 个回答
var a=10;   
function f1(x){ //let x = a 这里隐藏了一句话 当a是引用类型你的推断才成立
    x++
    return x
    }
f1(a)
console.log(a)//为什么函数没有把a修改了呢。

因为你没改变a的值啊,以下代码当作对比

var a=10; 
function f1(x){
    x++
    a = x
    return x
}
f1(a)
console.log(a)

在 f1 作用域,变量 x 的值是参数 a 的值的拷贝。返回值 x 未赋值给 a,a 的值自然没有修改。
你需要先了解 js 的值类型和引用类型。

函数参数传递中
基本类型是值传递
引用类型是引用传递
你这个只是将a值付给了x,改变xa没有影响

你知不知道 K&R C 中有一种写法:

int f( p, q, r )  
int p, float q, double r;  
{  
    // Code goes here  
}

函数的参数本质上就是函数内部定义的一个变量,并在调用函数的时候对它们赋值

所以你的代码,就等价于


var a = 10;
var x = a;
x++;
console.log(a);

或许像这么写,你会好理解一点。

var a=10;   
function f1(x){
    x++
    return x
    }
a = f1(a);   // 把处理过的值赋给a
console.log(a)

望采纳。哈

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题