【发布时间】:2015-09-24 11:56:44
【问题描述】:
在观看了 Kyle Simpson 在 Pluralsight 上的 Advanced JavaScript 课程后,我创建了一个简单的代码 sn-p 来尝试 this 绑定。我通常在 SublimeText 编辑器中工作,并在其中配置节点构建引擎,偶尔我也会在浏览器中运行相同的代码。在 Node 和浏览器 [Chrome] 中执行代码时,我注意到程序输出存在一个差异。
下面是代码 sn-p 来尝试this 绑定。
function foo() {
console.log(this.bar);
}
var bar = "bar1";
var obj = {bar : "bar2"};
foo();
foo.call(obj);
当我使用 Sublime 执行它时,它返回 undefined 和 bar2。但是,当我在浏览器中执行相同的 sn-p 时,它会返回 bar1 和 bar2,我认为这是正确的,因为变量 bar 是在全局范围内定义的。我无法理解为什么 Node 环境将其返回为 undefined。请帮忙。
【问题讨论】:
-
这就是为什么所有的 Javascript 代码都应该在严格模式下运行。然后,错误的代码有时不会意外工作,但有时不会。
foo()的调用以及随后在foo()内部对this.bar的引用只是糟糕的代码,有时会在浏览器中意外工作,因为您碰巧有一个与您尝试的属性同名的全局变量参考和this在浏览器中设置为window,而不是在严格模式下运行,全局变量是window对象的属性。在严格模式下运行,此错误将立即显示给您。 -
基本上,在浏览器中
this === window,但在 Node 中this !== global和 Node 模块中的闭包之外的 var 无论如何都不会创建全局变量。 -
非常感谢@jfriend00 的快速回复和澄清疑问。
-
感谢@AlexanderO'Mara 的澄清。
标签: javascript node.js function binding this