提问者:小点点

为什么下面的代码将x值打印为1而将y值打印为10


    var y;

function modify(x) {

    var z = 5;
    x += 2;
    y += x + z

}

var x = 1,
    y = 2,
    z = 3
modify(x)

上面的片段结果是x=1,y=10,z=3,请解释这段代码。提前致谢


共1个答案

匿名用户

在modify函数中,“x”在modify的作用域中,而不是在全局作用域中使用x。此外,基元类型(如数字)是通过值而不是引用传递的。因此,x总是保持1。

同样在modify函数中,您要在modify函数的作用域中声明一个新的变量z,所以就像x一样,z将保持为3。

由于函数中没有声明y,它将使用全局作用域,所以这是唯一要改变的作用域。在这个例子中,它是2+((1+2)+5),这就是你得到10的方法。