属性函数的javascript初始值
foo.js test.js属性函数的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和
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呢