【问题标题】:When you define a function in NodeJS, which object is that function a member of? [duplicate]当您在 NodeJS 中定义一个函数时,该函数是哪个对象的成员? [复制]
【发布时间】:2020-04-18 07:52:30
【问题描述】:

在浏览器执行环境中定义函数时,该函数是window 对象的成员。例如:

function myFunc() {
    console.log( 'hello' );
}

console.log( window.myFunc );   // valid

在 NodeJS 中,我们没有 window 对象,我们有 globalmodule 对象。但是,当您在 NodeJS 执行环境中以相同的方式定义函数时,该函数不是global 对象或module 对象的一部分。

function myFunc() {
    console.log( 'hello' );
}

console.log( global.myFunc );   // undefined
console.log( module.myFunc );   // undefined

那么myFunc 是哪个对象的成员?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    Javascript 中的函数不会自动成为任何特定对象的成员。如果您希望它们成为,那么您必须以这种方式分配它们。

    确实会发生这种情况,在浏览器中,全局范围内定义的函数将附加到 window 对象,但这是浏览器实现的细微差别,而不是 Javascript 本身。

    而且,事实上,该语言正在远离这种形式,因为顶级范围中的 class 定义等较新的东西未附加到 window 对象。

    在 node.js 中,您的默认顶级范围是模块范围,其中定义的函数不会自动附加到任何对象。如果您希望函数是全局的,则必须将其分配给 global 对象。

    尽管如此,请记住 node.js 具有模块化架构,因此您不会将定义的函数设为全局。相反,您从一个模块中导出它们,并让任何其他模块想要使用它们importrequire() 您的模块来访问该功能。这样所有的依赖都是在代码中显式声明的,而不是通过全局变量在代码中隐式定义的。

    因此,在 node.js 中,如果您希望将函数附加到对象,则必须将其作为命名属性显式放在对象上。 Javascript 没有在语言中提供一种方法来迭代范围内定义的所有对象/函数。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2013-05-17
      • 2018-07-04
      • 1970-01-01
      • 2016-01-28
      • 2011-03-27
      相关资源
      最近更新 更多