我正在阅读这本名为《Eloquent JavaScript》的好书,但我对这个示例中“绑定”一词的使用感到困惑:
可以在对象表达式中包含符号属性,并且 通过在属性名称周围使用方括号来划分类。这导致 要评估的属性名称,很像方括号 属性访问符号,它允许我们引用一个绑定 持有符号。
let stringObject = {
[toStringSymbol]() { return "a jute rope"; }
};
console.log(stringObject[toStringSymbol]());
// → a jute rope
据我了解(到目前为止,在我的 JS 旅程中),“绑定”涉及指定函数在哪个
this
或对象上下文中运行。看这里。。绑定可能与上下文有关。这就是为什么我们有
.bind()
。但在这个例子中,我们绑定了其他东西(一个键是符号的方法)。
binding
只是意味着将属性(基元或方法)附加到对象吗?
绑定只是意味着将属性(原语或方法)附加到对象吗?
没有
您的上一段提供了更好的解释:
“绑定”涉及指定哪个 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
关键字反映了存储桶借用了这些东西)。
绑定 是很多人所说的变量 的正式术语。在 ES2015+ 中,可以使用 let
关键字定义变量,但也可以使用
const
关键字定义常量。绑定可以引用变量或常量。 参考:请参阅 Eloquent JavaScript 第 2 章第 1 页,标题“绑定”部分下 (
https://eloquentjavascript.net/02_program_struct.html)
function hi() {
console.log("${this.name}");
}
const val = { name: 'Ishant' };
const bindingValue = hi.bind(val);
bindingValue(); // this will give me : "Hi! Ishant"
let count = 1;//count is a binding(a variable)
++count;//it's called side effect(because the original value of count binding was modified)