我对此代码以及绑定此规则的规则的行为感到有些困惑:
var a = 2;
var self = this;
function foo(){
console.log(this.a); // node: undefined - jsc: 2
console.log(self === this); // node: false - jsc: true
}
如果我使用node来运行我的代码,我得到undefined和false,而使用jsc(当然用debug替换console.log或创建一个别名)我得到2并且为true。为什么我会这样做?似乎是在严格模式下运行的节点。
谢谢。
答案 0 :(得分:0)
我发现了问题。 NodeJS将我的file.js包装在一个函数中:
(function (exports, require, module, __filename, __dirname) {
...myCode
})(exports, require, module, 'file.js', '/dir/name');
所以var a = 2不在NodeJS的全局范围内,为什么我得不到
真
当我做的时候
自===真
foo()是一个简单的普通函数调用,因此它确定我将获得绑定到该调用的全局对象,并且在我的全局范围内,a是未定义的!我需要删除关键字var以获取真正的全局变量。