javascriptvar foo={ x:3, exe:function(){ console.log(this); return this.x; } }
为什么
javascriptvar a = foo.exe; a();//undefined NO.1 (foo.exe=foo.exe)()//undefined NO.2
而
javascript(foo.exe)() //3 NO.3 foo.exe() //3 NO.4
特别是 NO.3 这种情况,小括号起到了什么作用?为什么 this 仍然指向这个对象?而 NO.2 和 NO.1 则指向了 window?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
前两种情况是一样的,相当于返回了这个函数。括号只是用来表示优先级的,而第二个和第三个的区别是第二个是一个表达式,有返回的。拆开来就是
函数的
this只和运行时的上下文有关,和声明定义时的上下文无关。此时a变量的上下文就是window所以this.x自然是undefined。第三种和第四种的情况是一样的,那个括号加上和没加都一样,具体就不多表了,不懂的话再提出来吧。
最后,SF 上关于
this的问题非常多,你提出的这个也有相关的问题,可以搜索学习一下。