属性函数的javascript初始值

属性函数的javascript初始值,javascript,node.js,initialization,commonjs,node-modules,Javascript,Node.js,Initialization,Commonjs,Node Modules,foo.js test.js var bar = function () { return "hello world"; } module.exports = { bar: bar } 问候语1、问候语2、问候语3在所有场合都有“你好世界”的价值吗 询问,因为如果有这样一个场景,foo.bar最初是未定义的,因为它尚未初始化,只有在调用foo.bar()时才初始化。这里您似乎有两个问题 问候语1、问候语2、问候语3在所有场合都有“你好世界”的价值吗 嗯,不,不完全是。greeting1和

foo.js

test.js

var bar = function () { return "hello world"; }

module.exports = {
  bar: bar
}
问候语1、问候语2、问候语3在所有场合都有“你好世界”的价值吗


询问,因为如果有这样一个场景,foo.bar最初是未定义的,因为它尚未初始化,只有在调用foo.bar()时才初始化。

这里您似乎有两个问题

问候语1、问候语2、问候语3在所有场合都有“你好世界”的价值吗

嗯,不,不完全是。
greeting1
greeting3
变量包含一个函数,
foo.bar
。只有
greeting2
包含字符串
“hello world”
。在另外两种情况下,您没有实际调用函数,只是引用它并将其存储在变量中

询问,因为如果有一个场景,其中foo.bar最初是未定义的,因为它尚未初始化,只有在调用foo.bar()时才初始化


Node.js保证
foo.bar
将在您使用它时初始化。
require
功能是同步的,它会阻塞,直到加载请求的模块。因此,不必担心初始化,因为Node将为您处理初始化。

这里您似乎有两个问题

问候语1、问候语2、问候语3在所有场合都有“你好世界”的价值吗

嗯,不,不完全是。
greeting1
greeting3
变量包含一个函数,
foo.bar
。只有
greeting2
包含字符串
“hello world”
。在另外两种情况下,您没有实际调用函数,只是引用它并将其存储在变量中

询问,因为如果有一个场景,其中foo.bar最初是未定义的,因为它尚未初始化,只有在调用foo.bar()时才初始化


Node.js保证
foo.bar
将在您使用它时初始化。
require
功能是同步的,它会阻塞,直到加载请求的模块。因此,无需担心初始化,因为Node将为您处理初始化。

greeting1
greeting3
都是函数(它们都指向foo.js模块中的
bar
函数)

greeting2==“hello world”
,因为它是执行
bar
函数的返回结果

这是因为您在某些地方使用
foo.bar
,而在其他地方使用
foo.bar()
。一个只获取函数,最后带有
()
的函数实际执行函数


为了更简单地看到结果,让我们移除模块。您的代码与此等效:

var foo = require("foo.js");

var greeting1 = foo.bar;
var greeting2 = foo.bar();
var greeting3 = foo.bar;


你问题的最后一句很让人困惑。如果
foo.bar
最初没有值(例如,它未定义),则在它确实有值之前,您无法执行
foo.bar()。也许您需要向我们展示真正的代码以及
foo.bar
实际上是如何初始化的。在您的问题中,它总是有一个初始值。

greeting1
greeting3
都是函数(它们都指向foo.js模块中的
bar
函数)

greeting2==“hello world”
,因为它是执行
bar
函数的返回结果

这是因为您在某些地方使用
foo.bar
,而在其他地方使用
foo.bar()
。一个只获取函数,最后带有
()
的函数实际执行函数


为了更简单地看到结果,让我们移除模块。您的代码与此等效:

var foo = require("foo.js");

var greeting1 = foo.bar;
var greeting2 = foo.bar();
var greeting3 = foo.bar;


你问题的最后一句很让人困惑。如果
foo.bar
最初没有值(例如,它未定义),则在它确实有值之前,您无法执行
foo.bar()。也许您需要向我们展示真正的代码以及
foo.bar
实际上是如何初始化的。在你的问题中,它总是有一个初始值。

在该代码中,
greeting1
greeting3
将是函数,而不是字符串。在该代码中,
greeting1
greeting3
将是函数,而不是字符串。这不是问题的答案。他询问属性
bar
是否为“hello world”-事实并非如此,因为除非调用它,否则它将指向函数。正如你在评论中所说的。。。(?)你在回答中提供的(有用的)信息比在评论中提供的要少:)@在我看来,这个问题不清楚,我的评论反映了这一点。然而,最后一句话似乎是在问一个真正的问题:“如果有这样一个场景,foo.bar最初是未定义的,因为它还没有初始化,只有在调用foo.bar()时才初始化,那该怎么办呢?”是的,但这只表明OP对任何事情的工作方式完全感到困惑(对不起,OP),这似乎是——甚至有更多的理由提供完整的解释,不是吗?@一个足够公平的人;我已经编辑了一些额外的信息来澄清。实际上,再次阅读OP的最后一句话,
bar
怎么可能是
未定义的
,如果它还没有被调用,它应该是一个函数。。。哦,等等,不,就像我说的-OP很困惑,他猜测没有报告一个实际的观察:)给OP:它不是未定义的,它将是一个函数或字符串。这不是问题的答案。他询问属性
bar
是否为“hello world”-事实并非如此,因为除非调用它,否则它将指向函数。正如你在评论中所说的。。。(?)你在回答中提供的(有用的)信息比在评论中提供的要少:)@在我看来,这个问题不清楚,我的评论反映了这一点。然而,最后一句话似乎是在问真正的问题:“问是因为如果有一个场景,foo.bar最初是未定义的b呢