【发布时间】:2021-07-26 21:31:38
【问题描述】:
我只是偶然发现了这个奇怪的东西,我想知道这是一个错误,还是预期的行为。
let myfunc = function(a) {
return function localScope(b) {
console.log(a + b + " this")
}
}
(function () {
console.log('test')
})()
第一个函数返回一个函数。我从不调用它们中的任何一个。
然后在下面,我创建了一个自调用函数,发生的情况是,自调用函数没有被调用,而是作为a 参数传递给上面的myFunc 父函数,然后不知何故myFunc 被调用,由于某种原因,返回的localScope 函数也被调用,它控制台出自调用函数的主体。
但是,如果我通过用括号括起来以不同方式声明自调用函数,则不会发生这种情况,如下所示:
(function () {
log('test')
}())
这像是一个错误,还是预期的行为?为什么以不同方式声明自调用函数会有所不同?
我猜这与范围对象有关,但我不知道这里发生了什么。为什么将自调用函数作为参数传递,以及为什么以及如何调用父级内部的本地函数。
【问题讨论】:
-
因为您缺少用于分隔两个语句的分号。
-
"如果我通过用括号括起来以不同方式声明自调用函数,则不会发生这种情况" - 它仍然会发生,它只是传递了一个不同的值。
-
@Bergi 我还是不明白为什么?它们仍然是两个独立的功能吗?为什么将自调用作为参数传递?如何?
myFunc是怎么调用的,返回的localScope是怎么调用的? -
@IloveCoffee 因为
let myfunc = function(a) {…}(…)仍然是一个函数调用。它们不是分开的,因为您在所有陈述之后都缺少分号。不要省略分号,除非你了解 JS 是如何处理它们的。
标签: javascript