Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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中来自事件和隐式绑定_Javascript_Binding_Scope_This_Addeventlistener - Fatal编程技术网

此范围在javascript中来自事件和隐式绑定

此范围在javascript中来自事件和隐式绑定,javascript,binding,scope,this,addeventlistener,Javascript,Binding,Scope,This,Addeventlistener,我是JS的新手(我也在学习React),我的问题与“this”关键字在以下代码中采用的两个不同值有关: var记录器={ a:console.log('>>this:',this),//窗口 x:0,, updateCount:function(){ this.x++;//x=1 log('updateCount:',this);//隐式绑定:logger |来自事件:按钮 console.log('>>x:',this.x);//隐式绑定:x=1 |来自事件:NaN } } log('调用的

我是JS的新手(我也在学习React),我的问题与“this”关键字在以下代码中采用的两个不同值有关:

var记录器={
a:console.log('>>this:',this),//窗口
x:0,,
updateCount:function(){
this.x++;//x=1
log('updateCount:',this);//隐式绑定:logger |来自事件:按钮
console.log('>>x:',this.x);//隐式绑定:x=1 |来自事件:NaN
}
}
log('调用的顶部')
logger.updateCount()
//为什么在记录器内部“this”从按钮获取范围

document.querySelector(“#btn”).addEventListener('click',logger.updateCount)对于我来说,思考“this”的范围与思考周围闭包或对象的外部范围最相关,或者我也称之为“environment”。因此,在“this”的第一个console.log中,周围的闭包指向围绕logger实例的全局窗口对象。“this”的第二个console.log位于logger对象的方法中,因此它指向对象本身。对象是(“包围”该方法),在第三个对象中,您不调用该方法,而是将调用留给外部api。您只需传递一个对您的函数的引用,以便其他人现在围绕该函数,并在执行该函数时将“this”传递给它的环境

“我知道如果我想让它工作,我应该向addEventListener传递一个回调”-
logger.updateCount
是一个…;)