NodeJS和JSC中“this”的行为

时间:2016-10-27 07:24:55

标签: javascript this

我对此代码以及绑定此规则的规则的行为感到有些困惑:

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。为什么我会这样做?似乎是在严格模式下运行的节点。

谢谢。

1 个答案:

答案 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以获取真正的全局变量。