Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何理解;{fun:function.bind(this)}";?_Javascript - Fatal编程技术网

Javascript 如何理解;{fun:function.bind(this)}";?

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

输出是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: 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