属性函数的 JavaScript 初始值

javascript initial value of property function

本文关键字:JavaScript 函数 属性      更新时间:2023-09-26

foo.js

var bar = function () { return "hello world"; }
module.exports = {
  bar: bar
}

测试.js

var foo = require("foo.js");
var greeting1 = foo.bar;
var greeting2 = foo.bar();
var greeting3 = foo.bar;
问候1,问候

2,问候3在所有的事物中都有价值"你好世界"吗?

询问是因为如果存在 foo.bar 最初未定义的情况,因为它尚未初始化并且仅在调用 foo.bar() 时初始化怎么办。

你在这里似乎有两个问题。

问候1,问候

2,问候3在所有的事物中都有价值"你好世界"吗?

嗯,不

,不完全是。greeting1greeting3 变量包含一个函数,foo.bar 。只有greeting2包含字符串,"hello world" .在其他两种情况下,您没有自动调用该函数,只是引用它并将其存储在变量中。

询问是因为如果存在 foo.bar 最初未定义的情况,因为它尚未初始化并且仅在调用 foo.bar() 时初始化,该怎么办。

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

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

greeting2 === "hello world"是因为它是执行该bar函数的返回结果。

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


为了以更简单的方式查看结果,让我们删除模块。 您的代码等效于以下内容:

var foo = {
    bar: function() { return "hello world"; }
};
var greeting1 = foo.bar;     // contains a function reference
var greeting2 = foo.bar();   // contains "hello world" because it executed the function
var greeting3 = foo.bar;     // contains a function reference

你问题的最后一句话非常令人困惑。 如果foo.bar最初没有值(例如,它是未定义的),那么在它有值之前,你不能执行foo.bar()。 也许您需要向我们展示真实的代码以及foo.bar实际上是如何初始化的。 在您的问题中,它始终具有初始值。