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.3foo.exe()//3NO.4特别是NO.3这种情况,小括号起到了什么作用?为什么this仍然指向这个对象?而NO.2和NO.1则指向了window?
2 回答
慕后森
TA贡献1802条经验 获得超5个赞
前两种情况是一样的,相当于返回了这个函数。括号只是用来表示优先级的,而第二个和第三个的区别是第二个是一个表达式,有返回的。拆开来就是vara=(foo.exe=foo.exe);a();函数的this只和运行时的上下文有关,和声明定义时的上下文无关。此时a变量的上下文就是window所以this.x自然是undefined。第三种和第四种的情况是一样的,那个括号加上和没加都一样,具体就不多表了,不懂的话再提出来吧。最后,SF上关于this的问题非常多,你提出的这个也有相关的问题,可以搜索学习一下。
添加回答
举报
0/150
提交
取消