1

当调用一个函数时,会为该调用创建一个新的词法环境。该词法环境包含一个环境记录,该记录又包含该环境中存在的本地命名绑定。因此,例如:

(function () {

    var x = 123;

    // other code

}());

在上面的函数调用中,函数的词法环境中将存在一个 name"x"和 value的绑定。123

现在,如果我们想更改该绑定的值,我们可以:

  1. 将标识符设置x为赋值运算符之一的左侧:

    x = 456; 
    // the value of the "x" binding has changed to 456 
    
  2. 将标识符设置x为前缀/后缀递增/递减运算符的操作数:

    x++;
    // the value of the "x" binding has changed to 124 
    

我的问题:这些是改变“x”绑定值的仅有的两种方法吗?

4

1 回答 1

1

好吧,我认为我们不应该在这里谈论“绑定”。@Incognito 在对该问题的评论中给出的链接描述了变量和函数的绑定 - 但不是它们的

由于您的示例中的“x”分配了一个原始值,我认为没有办法改变它 - 如果不是在分配中(直接或语法糖)。

例如,这...

var x = 42;
x.y   = 24;

...实际上不会导致更改x(它被转换为一个对象,分配了一个新属性,但是这个对象将被丢弃)。

和这个...

function x() { ... }

... 也将无法为x.

更新:我的观点是'var x = 42'JS 中的语句(而不是 Erlang 中的语句)不会导致42(数字文字) 绑定到 variable x

于 2012-09-26T13:46:37.577 回答