调用函数时,会为该调用创建一个新的词法环境。该词法环境包含一个环境记录,该记录又保存该环境中存在的本地命名绑定(bind)。因此,例如:
(function () {
var x = 123;
// other code
}());
在上面的函数调用中,函数的词法环境中将存在一个名为 "x"
和值 123
的绑定(bind)。
现在,如果我们想更改该绑定(bind)的值,我们可以:
将标识符
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”绑定(bind)值的唯一两种方法吗?
最佳答案
嗯,我认为我们不应该在这里谈论“绑定(bind)”。 @Incognito 在问题评论中给出的链接描述了变量和函数的绑定(bind) - 但没有描述它们的值。
由于示例中的“x”分配了一个原始值,我认为没有办法改变它 - 如果不是在赋值中(直接或语法糖)。
例如,这个...
var x = 42;
x.y = 24;
...实际上不会导致更改x
(它会转换为一个对象,分配一个新属性,但随后该对象将被丢弃)。
还有这个...
function x() { ... }
...也无法为 x
分配新值。
更新:我的观点是,JS 中的 'var x = 42'
语句(但不是 Erlang)不会导致绑定(bind) 42
(数字文字)到变量x
。
关于javascript - 更改函数词法环境中绑定(bind)的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12603160/