1.阅读《你不知道的javascript》是里面有段代码如下:
function foo() {
var a = 2;
this.bar();
}
function bar() {
console.log(this.a);
}
foo();
作者说this.bar()是引用不到bar()函数,调用bar()应省去前面的this。而在接下来的2.2.1节中作者又举了例子:
function foo() {
console.log(this.a)
}
var a = 2
foo()//2
这里this.a却没问题。
2.我的困惑是:foo调用时是默认绑定,foo中的this应绑定到全局,而全局中有bar函数,所以this.bar()应该可以引用到bar函数。那么作者说的foo中的this.bar()引用不到bar()函数又该如何理解?还请大家不惜赐教,非常感谢!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
应该是是说
this不是指foo作用域吧,所以this.a不是2或者说是
use strict其实,
this.bar()是否能调用成功,取决于环境。你可以试下,在 Chrome console 里面是没问题的,因为全局声明的 function 都放在了Window底下。但在 NodeJS 中就不行。同理,取决于环境
另外,就算你的
foo和bar是被绑定到了Window对象中,a也是不会绑定上去的,因为a是在foo里面用var声明的。。所以console.log(this.a)肯定会输出undefined作者应该是指的是在严格模式下,this指向的是undefined。
在非严格模式下两个函数的this都是指向window的。this.bar()是可调用的,返回的结果是undefined(因为a为foo的局部变量,在全局下是访问不到的).
好吧,都怪我英文不好!谢谢大家的回答!
这是中文翻译:
这是英文:
可以看下这个详细介绍JavaScript this 到底指向什么?,希望对你有帮助
第一个this代指的是foo,并不是window,所以this.bar并没有指定到window上的bar方法;
第二个是因为console是window上的对象,在定义时已经做过处理,console里面的this都统一为window。所以能获取到外部定义的对象。