Javascript中的绑定是啥意思?
Posted
技术标签:
【中文标题】Javascript中的绑定是啥意思?【英文标题】:What does binding mean in Javascript?Javascript中的绑定是什么意思? 【发布时间】:2018-09-14 16:14:03 【问题描述】:我正在阅读这本名为 Eloquent javascript 的好书,但我对 this example: 中使用“绑定”一词感到困惑
可以在对象表达式中包含符号属性和 通过在属性名称周围使用方括号来进行类。这导致 要评估的属性名称,很像方括号 属性访问表示法,它允许我们引用一个绑定 持有符号。
let stringObject =
[toStringSymbol]() return "a jute rope";
;
console.log(stringObject[toStringSymbol]());
// → a jute rope
据我所知(到目前为止,在我的 JS 旅程中),“绑定”与指定函数在哪个 this
或对象上下文中运行有关。 See here.。绑定可能与上下文有关。这就是为什么我们有.bind()
。
但在这个例子中,我们绑定了其他东西(键是符号的方法)。 binding
只是意味着将属性(原语或方法)附加到对象吗?
【问题讨论】:
【参考方案1】:绑定只是意味着将属性(原语或方法)附加到对象上吗?
否
您的上一段提供了更好的解释:
“绑定”与指定 this 或对象上下文有关
有点
JavaScript 跟踪的所有内容都是绑定的。事实上,undefined
的定义意味着 JavaScript 找不到绑定的标识符。
回答
在 JavaScript 中绑定某些东西意味着将该标识符记录在特定的 Environment Record
中。每个Environment Record
都与特定的Execution Context
相关联,并将标识符(变量或函数名称)绑定到该执行上下文的this
关键字。
参考
https://www.ecma-international.org/ecma-262/5.1/#sec-10.5
不太正式
将环境记录视为一堆东西。这些不是对象、函数或变量,也不是我们在 JavaScript 中编码的任何东西,这些存储桶包含所有这些东西。 JavaScript 应用程序中有许多存储桶。每个存储桶独立于其他存储桶运行。这种独立性在 JavaScript 中表示为上下文(或执行上下文)。但有时我们想在另一个桶中使用一个桶中的东西。这就是绑定的用武之地。我们可以将一个桶中的东西绑定到另一个桶的上下文中以在那里执行。 (这样做的副作用是 this
关键字反映了桶借用的东西)。
【讨论】:
这是很好的信息,谢谢。不幸的是,Eloquent Javascript 在从第 2 版到第 3 版时做出了这种改变。当它把变量称为变量,就像所有其他资源一样时,它是如此出色的教学工具。对于一本针对没有经验的开发人员的书来说,这是多么令人困惑和不必要的变化。此信息可以很容易地包含在解释.bind()
和this
等的章节中。
@reustin 同意。我从同样的资源和同样的原因来到这里,不久前学习过 ES5,对绑定的通用引用给我的印象是变量已在 ES6 中重命名。【参考方案2】:
很遗憾,在这个问题的上下文中,接受的答案是错误的。
JavaScript 中的绑定 是许多人称为变量 的正式术语。在 ES2015+ 中,可以使用 let
关键字定义变量,但您也可以使用 const
关键字定义常量。 绑定可以引用变量或常量。
为了捕获和保存值,JavaScript 提供了一个叫做 绑定或变量。
参考:请参阅 Eloquent JavaScript 的第 2 章第 1 页,在标题“绑定”(https://eloquentjavascript.net/02_program_structure.html) 部分下
【讨论】:
【参考方案3】:在本书中,它们交替使用绑定或变量。所以简单地说,绑定是一个变量。我猜你是通过跳过页面开始阅读的,不要再这样做了。我会写一个很简单的程序来说明。
let count = 1;//count is a binding(a variable)
++count;//it's called side effect(because the original value of count binding was modified)
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Javascript中的绑定是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章