gpt4 book ai didi

javascript - 函数名称是否存储在 IIFE 中?

转载 作者:行者123 更新时间:2023-11-30 06:51:23 25 4
gpt4 key购买 nike

据我了解,函数声明周围的分组运算符会强制将函数作为表达式求值。这就是允许执行括号运算符 () 起作用的原因。但是,这种方法将函数名称从外部访问中移除。我想知道与声明范围内可用的函数声明名称相比,IIFE 函数名称是如何存储的。

(function hidden(){
console.log("function executed");
})()

最佳答案

Angus Croll 有一篇关于 javascript 中函数声明和函数表达式之间的区别的好文章 (https://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/)

基本上,您要做的是将函数 hidden() 视为函数表达式 内部 的函数声明。正如 Croll 在文章中所说,在函数表达式内部,“函数名称(如果有的话)在它的范围之外是不可见的(与函数声明对比)。”

如果您将匿名函数重写为赋值,我认为这会使重点更清楚:

var a = function hidden() {
console.log('inside hidden');
}

现在这会出错:

var a = function hidden() {
console.log('inside hidden');
}
hidden();

因为函数的名称在其自身上下文之外不可用。

然而,这将工作正常:

var a = function hidden() {
console.log('inside hidden');
}
a();

因为变量可以像您期望的那样在它自己的上下文之外被引用(否则除了在 hidden() 函数体内之外,它在任何地方都无法访问)。

如果我们再次查看匿名版本,您就会明白它失败的原因:

(function hidden() {
console.log('inside hidden');
}
// We're outside of IIFEs function body here
// so NO code can be executed.
)();

关于javascript - 函数名称是否存储在 IIFE 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com