var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind(this);
};
c.say();
// Ouput: 2
输出为2,我不知道为什么。为什么此指向全球?
答案 0 :(得分:3)
在全局范围内执行此语句时:
var a = 2;
它等于window.a = 2
。
在您的代码中,首先发生的是执行.bind(this)
方法。由于您位于全球范围内,this
此处指向window
。因此,say
函数绑定到此函数内的window
和this.a
,变为window.a
,因此console.log(this.a)
变为console.log(window.a)
。
为了理解行为,您必须先了解bind
的作用。检查此documentation。检查一下,例如:
var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind({a: 7});
};
c.say(); // outputs 7
答案 1 :(得分:0)
当你在匿名函数中时,你不是在呼叫c.a
。请改用{{1}}。
答案 2 :(得分:0)
val lxx3 = lxx1.::(lxx2)
的默认值为this
。此外,由于您的代码未包含在函数中,window
成为var a
尝试将其包裹在IIFE中
window