为什么全球" this.function"没有"这是不可访问的。"?

时间:2014-04-11 03:25:51

标签: javascript node.js

this.func0 = function() {
   console.log('hi')
}
this.func0() // this works
func0() // but not this?

为什么func0()无效? Aren&#t; t this.f()f()都应该访问全局对象?

1 个答案:

答案 0 :(得分:5)

这里要理解的重要一点是,在Node.js中,每个JavaScript文件都将被视为一个单独的模块。

因此,在JavaScript文件中,this将引用当前模块对象,而不是global对象。我们在Node.js中有一个叫global对象的东西,它有点类似于浏览器的window对象。

这就是你正在使用你的程序

this.func0 = function() {
   console.log('hi')
}

您正在创建一个功能对象并将其分配给当前模块的func0属性。

this.func0();

您正在调用当前模块的func0

func0();

JavaScript,在当前范围内搜索func0,然后在全局范围内搜索,但在任何地方都找不到它。这就是为什么它失败了ReferenceError

ReferenceError: func0 is not defined

如果你真的想在全球范围内设置它,那么你应该这样做

global.func0 = function() {
   console.log('hi')
}
func0();
// hi
相关问题