Javascript 中的绑定是什么意思?

cha*_*ham 7 javascript binding

我正在阅读这本名为 Eloquent JavaScript 的好书,但我对这个例子中“绑定”这个词的使用感到困惑

通过在属性名称周围使用方括号,可以在对象表达式和类中包含符号属性。这会导致属性名称被评估,就像方括号属性访问符号一样,它允许我们引用一个包含符号的绑定。

let stringObject = {
  [toStringSymbol]() { return "a jute rope"; }
};
console.log(stringObject[toStringSymbol]());
// ? a jute rope
Run Code Online (Sandbox Code Playgroud)

据我了解(到目前为止在我的 JS 旅程中),“绑定”与指定this函数在哪个或对象上下文中运行有关。看这里。. 绑定可能与上下文有关。这就是为什么我们有.bind().

但是在这个例子中,我们绑定了其他东西(一个键是符号的方法)。是否binding只是意味着将属性(原语或方法)附加到对象上?

L_H*_*L_H 7

JavaScript 中的绑定是很多人所说的变量的正式术语。在ES2015+中,可以使用关键字定义变量let,但也可以使用const关键字定义常量。绑定可以引用变量或常量

参考:请参阅 Eloquent JavaScript 第 1 页第 2 章,标题“绑定”部分下 ( https://eloquentjavascript.net/02_program_struct.html )


Ran*_*urn 6

绑定是否只是意味着将属性(原语或方法)附加到对象上?

您上一段提供了更好的解释:

“绑定”涉及指定 this 或 object 上下文

有点

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”等的章节中。 (2认同)