在函数的词法环境中更改绑定的值

时间:2012-09-26 13:44:19

标签: javascript theory

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

(function () {

    var x = 123;

    // other code

}());

在上面的函数调用中,在函数的词法环境中将存在名为"x"和值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 
    
  3. 我的问题:这些只是改变“x”绑定值的两种方法吗?

1 个答案:

答案 0 :(得分:1)

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

由于你的例子中的'x'分配了原始值,我认为没有办法改变它 - 如果不是在赋值中(直接或语法糖)。

例如,这......

var x = 42;
x.y   = 24;

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

这就是......

function x() { ... }

...也无法为x分配新值。

更新:我的观点是JS中的'var x = 42'语句(但不在Erlang中)不会导致42(数字文字)与变量x的绑定。