调用函数时,会为该调用创建一个新的词法环境。该词法环境包含环境记录,该环境记录又保存该环境中存在的本地命名绑定。所以,例如:
(function () {
var x = 123;
// other code
}());
在上面的函数调用中,在函数的词法环境中将存在名为"x"
和值123
的绑定。
现在,如果我们想要更改该绑定的值,我们可以:
将标识符x
设置为其中一个赋值运算符的左侧:
x = 456;
// the value of the "x" binding has changed to 456
将标识符x
设置为前缀/后缀增量/减量运算符的操作数:
x++;
// the value of the "x" binding has changed to 124
我的问题:这些只是改变“x”绑定值的两种方法吗?
答案 0 :(得分:1)
好吧,我认为我们不应该在这里谈论'绑定'。 @Incognito链接在评论中给出了变量和函数的绑定 - 但不是它们的值。
由于你的例子中的'x'分配了原始值,我认为没有办法改变它 - 如果不是在赋值中(直接或语法糖)。
例如,这......
var x = 42;
x.y = 24;
...实际上不会导致更改x
(它被转换为一个对象,分配了一个新属性,但是这个对象将被丢弃)。
这就是......
function x() { ... }
...也无法为x
分配新值。
更新:我的观点是JS中的'var x = 42'
语句(但不在Erlang中)不会导致42
(数字文字)与变量x
的绑定。