先说解决办法:用html文件引入这个js文件,然后在控制台查看结果。或直接在html文件中的js标签中写代码,然后再控制台查看结果。
下面是过程和原理:
今天看项目的时候,遇到了this指向问题,便去复习了this指向问题。看的过程中想验证一下一些猜想,便用sublime打开一个test.js文件直接运行代码看结果,代码是一个基础的this指向问题的例子:
var a = 1;
function test() {
var a = 2;
console.log(this.a);
}
test();
很明显,这个程序的运行结果应该是 1 。
但当我用sublime的 command+b 直接运行js文件之后(command+b是安装了node.js然后更改设置的功能),它却显示undefined,如图:
这明显不是答案,于是便试了下让上面的代码在html的js标签中运行,然后去控制台看,果然是显示的2。这就说明sublime直接运行js文件内部有错误。于是去google了一下,得出了原因:
这里显示undefined是因为这里的运行实际是运行的 node,程序中的this是指向window,而
window
属于浏览器环境中的全局变量,在 node
中肯定拿不到的。所以会显示undefined。
解决办法就是用html文件引入这个js文件,然后在控制台查看结果。或直接在html文件中的js标签中写代码,然后再控制台查看结果。