【发布时间】:2012-12-16 05:04:29
【问题描述】:
我在 ie、firefox 和 node.js 中尝试过以下代码
var x = 10;
var o = { x: 15 };
function f(){
console.log(this.x);
}
f();
f.call(o);
浏览器中的结果是10、15,但是node.js中的结果是未定义的,15。
请向我解释一下“this”关键字在浏览器和 node.js 中的不同行为是什么?我已经阅读了很多页,但没有任何明显的答案。 提前致谢。
【问题讨论】:
-
也许 Node.js 默认在严格模式下运行...(在严格模式下,
this,在函数内部,从不强制转换为全局对象。) -
如何将这段代码加载到 node.js 中?如果加载 node.js 代码的任何内容都像通过
new Function(javascriptSourceCode)()那样将其解析为函数体,您会看到这种行为,因为var x将声明一个函数的本地变量,而不是顶级全局变量。 -
@ŠimeVidas,在这种情况下,您会得到一个异常取消引用
null,而不是undefined的this.x。 -
@MikeSamuel 是的,我的错。
-
@MikeSamuel,我将代码复制到文件 test.js 并运行该文件
标签: javascript node.js browser