为什么javascript中的对象分解会影响作用域?
我试图理解为什么对象分解会改变范围为什么javascript中的对象分解会影响作用域?,javascript,node.js,ecmascript-6,scope,Javascript,Node.js,Ecmascript 6,Scope,我试图理解为什么对象分解会改变范围 (function() { var o = { add: function(a , b) { return a + b; }, log: function () { console.log(this); } } var { log } = o; o.log(); log(); })(); 此代码将记录两个不同
(function() {
var o = {
add: function(a , b) {
return a + b;
},
log: function () {
console.log(this);
}
}
var { log } = o;
o.log();
log();
})();
此代码将记录两个不同的对象
第一个是预期的对象o,但第二个将记录全局对象
更新3-2021年5月:
如果您有相同的问题,并希望获得更详细的答案,请同时阅读以下内容:
这不完全正确
功能日志{
控制台。记录'na aahh'
}
作用{
变量o={
地址:functiona,b{
返回a+b;
},
日志:函数{
log'hi,我是本地范围的';
}
}
var{log}=o;
o、 日志;
日志
};这不完全正确
功能日志{
控制台。记录'na aahh'
}
作用{
变量o={
地址:functiona,b{
返回a+b;
},
日志:函数{
log'hi,我是本地范围的';
}
}
var{log}=o;
o、 日志;
日志
}; 你所做的或多或少相当于
const log = o.log
您已从对象中提取了一个方法,但尝试在不执行任何其他操作的情况下调用它,这将不会引用原始对象。你需要把它绑起来
你所做的或多或少相当于
const log = o.log
您已从对象中提取了一个方法,但尝试在不执行任何其他操作的情况下调用它,这将不会引用原始对象。你需要把它绑起来
这取决于您将其设置为什么:
这取决于您将其设置为什么:
这实际上与解构无关,而是与绑定的o.log和未绑定的log调用有关。只有使用前者,你才能得到正确的答案。这实际上与解构无关,而是与绑定的o.log和未绑定的log调用有关。只有用前者,你才能得到正确的答案。
(function() {
var o = {
add: function(a , b) {
return a + b;
},
log: function () {
console.log(this);
}
}
var { log } = o;
o.log();
// equivalent to
log.call(o);
})();