javascript 中 this 的问题,表达式何时进行求值?

javascriptvarfoo={x:3,
exe:function(){
console.log(this);
returnthis.x;
}
}
为什么
javascriptvara=foo.exe;
a();//undefinedNO.1
(foo.exe=foo.exe)()//undefinedNO.2
javascript(foo.exe)()//3NO.3
foo.exe()//3NO.4
特别是NO.3这种情况,小括号起到了什么作用?为什么this仍然指向这个对象?而NO.2和NO.1则指向了window?
墨色风雨
浏览 325回答 2
2回答

慕后森

前两种情况是一样的,相当于返回了这个函数。括号只是用来表示优先级的,而第二个和第三个的区别是第二个是一个表达式,有返回的。拆开来就是vara=(foo.exe=foo.exe);a();函数的this只和运行时的上下文有关,和声明定义时的上下文无关。此时a变量的上下文就是window所以this.x自然是undefined。第三种和第四种的情况是一样的,那个括号加上和没加都一样,具体就不多表了,不懂的话再提出来吧。最后,SF上关于this的问题非常多,你提出的这个也有相关的问题,可以搜索学习一下。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript