Javascript 如何理解;{fun:function.bind(this)}";?
输出是2,我不知道为什么。为什么要指向全局?因为您使用的是匿名函数,所以不能从Javascript 如何理解;{fun:function.bind(this)}";?,javascript,Javascript,输出是2,我不知道为什么。为什么要指向全局?因为您使用的是匿名函数,所以不能从c中调用。改用c.a。此的默认值为窗口。另外,由于您的代码没有包装在函数中,var a成为窗口的一部分 试着把它包装在生活中 (函数(){ var a=2; 变量c={ a:3, say:function(){ console.log(this.a); }.绑定(此) }; c、 say(); })()在全局范围内执行此语句时: var a = 2; var c = { a: 3, say: func
c
中调用。改用c.a
。此的默认值为窗口。另外,由于您的代码没有包装在函数中,var a
成为窗口的一部分
试着把它包装在生活中
(函数(){
var a=2;
变量c={
a:3,
say:function(){
console.log(this.a);
}.绑定(此)
};
c、 say();
})()
在全局范围内执行此语句时:
var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind(this);
};
c.say();
// Ouput: 2
它等于window.a=2
在代码中,首先执行.bind(this)
方法。由于您处于全局范围内,此
此处指向窗口
。因此,say
函数被绑定到窗口
和this.a
在这个函数中有点变成window.a
,因此这个console.log(this.a)
变成console.log(window.a)
为了理解行为,您必须首先了解bind
的作用。看看这个。选中此项,例如:
var a = 2;
这个
的默认值是WindowYou使用Node.js吗?我认为您可能会混淆全局变量a和模块的属性a。Try var Geta=retrievea.bind(c);Geta()并移除绑定(this);谢谢你的编辑。我是瑞士人(母语是瑞士语和德语),尽量用英语写得好。有时我会失败,但我总是感谢像你这样的人感谢您的回答:)定义c
时是否执行.bind(this)
方法?或者它是在我执行c.say()
?@Maxmengt时执行的,它是在定义和初始化c
之前执行的,因为初始化c
@Maxmengt需要say
的值,还有什么不清楚的吗?如果你觉得我的回答有帮助,请接受。谢谢你的回答。给我点时间吧。谢谢你的回答:)
var a = 2;
var c = {
a: 3,
say: function() {
console.log(this.a);
}.bind({a: 7});
};
c.say(); // outputs 7