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只是意味着将属性(原语或方法)附加到对象上?
JavaScript 中的绑定是很多人所说的变量的正式术语。在ES2015+中,可以使用关键字定义变量let,但也可以使用const关键字定义常量。绑定可以引用变量或常量。
参考:请参阅 Eloquent JavaScript 第 1 页第 2 章,标题“绑定”部分下 ( https://eloquentjavascript.net/02_program_struct.html )
绑定是否只是意味着将属性(原语或方法)附加到对象上?
不
您上一段提供了更好的解释:
“绑定”涉及指定 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关键字的副作用反映了借用东西的桶)。