如何理解“{fun:function.bind(this)}”?

时间:2016-10-20 07:46:42

标签: javascript

var a = 2;
var c = {
    a: 3,
    say: function() {
        console.log(this.a);
    }.bind(this);
};
c.say();
// Ouput: 2

输出为2,我不知道为什么。为什么指向全球

3 个答案:

答案 0 :(得分:3)

在全局范围内执行此语句时:

var a = 2;

它等于window.a = 2

在您的代码中,首先发生的是执行.bind(this)方法。由于您位于全球范围内,this此处指向window。因此,say函数绑定到此函数内的windowthis.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