this.func0 = function() {
console.log('hi')
}
this.func0() // this works
func0() // but not this?
为什么func0()
无效?
Aren&#t; t this.f()
和f()
都应该访问全局对象?
答案 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