为什么当我使用参数调用函数并在 Javascript 中调用函数 by() 时输出不同?


function a() {
console.log('A!');
function b(){
console.log('B!'); 
}
return b;
}

当我这样做时,

var s = a();

这是输出:

A!

当我这样做时,

a();

输出如下:

A!
ƒ b(){
console.log('B!'); 
}

我想知道为什么那里的输出不同。

因为函数a返回一个函数b

因此,这样做console.log(a())将打印函数b的源代码。

如果要执行返回的函数,只需调用它:

function a() {
console.log('A!');
function b() {
console.log('B!');
}
return b;
}
var s = a()
console.log(s);
console.log("--------------------------------------")
s();

发生这种情况是因为您返回的是b本身而不是b的结果(b())。

而且,由于您已在控制台中运行该函数,因此a的结果(即函数b)将以"代码形式"显示。

我花了一段时间才理解你的问题,但就我的辩护而言,似乎有多个问题合二为一,充满了相互矛盾的陈述、遗漏和错别字("by()"而不是"b()" ?简而言之,我们可以感受到您心中的困惑:-)

例如,您谈论参数,但您的函数都没有接受参数。此外,您似乎认为您会在某个时候调用b,但代码中没有类似b();的内容。最后,您从不告诉我们,但您直接在浏览器的控制台中编码,对吗 ?

话虽如此,以下是我总结主要问题 的方式:

为什么var s = a();a();有不同的输出 ?

你说var s = a();打印A!,而a();打印A!加功能b。实际上,a();不打印功能b,这个额外的输出来自浏览器的控制台。请记住,有两种类型的输出,一种是您使用console.log(...)明确要求的输出,另一种是由控制台本身生成的输出。正如 epascarello 所说,"在控制台中 [...]输出最后一条语句"。如果将a();写入控制台并按 ENTER,则最后一个语句是a(),并且由于a返回b控制台输出函数b。如果您编写var s = a();a仍然返回b但控制台不会告诉您a()因为不再是最后一条语句。我不确定,但在这种情况下,我会说var是最后一条语句,由于var不返回任何内容,因此控制台不输出任何内容。

最新更新