本人正在看《你不知道的javascript上卷》,第80页其有关使用this来隐式引用函数的词法作用域错误代码如下:
function foo(){
var a = 2;
this.bar(); //1
}
function bar(){
console.log(this.a);
}
foo();
我在VS Code上将代码注释1处的this给删掉之后(如书中所说)发现尽管代码没有出错但是结果为undefined。在单步调试查看调用堆栈时是foo->bar,也就是按照我所想的bar()中this绑定到了foo函数对象上。
百思不得其解之后在全局和bar函数中都另外再定义了不同值的a变量,然而结果还是undefined。。。突然想到是不是因为自动使用严格模式的原因,然而在各个浏览器控制台上测试同样是undefined的结果,无解。。。。。求助!!这个this到底绑定到哪里了!!
this的作用域和它运行的环境有关,它指向调用某方法、对象的对象。比如这里,如果是node.js,就会一直指向global;如果是浏览器,就会一直指向window。不过node.js环境下,在最外面一层以
var a = 1
形式声明的变量,并不会绑定在node.js 的global上,以a = 1
类似的方式声明。