javascript - 更改函数词法环境中绑定(bind)的值

标签 javascript theory

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

(function () {

    var x = 123;

    // other code

}());

在上面的函数调用中,函数的词法环境中将存在一个名为 "x" 和值 123 的绑定(bind)。

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

  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”绑定(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/

相关文章:

javascript - Rangy:如何根据父节点扩展选择?

javascript - Java:从 ScriptEngine javascript 返回一个对象

javascript - 统计已更改的单选按钮的总数

algorithm - 确定要服务的下一个客户的排队论算法

PHP/mysql - 查询与数组?

algorithm - 最长的简单路径

c++ - 为什么 header 中有 C++ 内联函数?

javascript - $.ajax 调用失败,数据类型为 json

javascript - createjs 文本元素在不同浏览器中的不同定位

c++ - 优化网络带宽使用 : Reusing strings