【发布时间】:2023-03-07 02:01:01
【问题描述】:
我试图在不使用 IIFE 模式的情况下立即调用一个函数(将函数定义括在括号内)。这里我看到了两种情况:
当立即调用函数声明时:给出
SyntaxError。当立即调用函数表达式时:执行成功。
示例 1: 给出SyntaxError
//gives `SyntaxError`
function() {
console.log('Inside the function');
}();
示例 2:执行没有任何错误
// Executes without any error
var x = function() {console.log('Inside the function')}(); // Inside the function
所以,我有这些疑问:
- 使用这种方法,为什么函数声明会报错,而函数表达式却不会报错?
- 有没有一种方法可以在不使用 IIFE 模式的情况下立即调用函数声明?
【问题讨论】:
-
快速提问。 IIFE 立即调用代码并创建一个范围。那么您对不使用 IIFE 模式立即调用函数声明有什么期望?
-
+function(){console.log('done')}()和new function(){console.log('done')}()似乎有效。我想知道,这里的引擎盖下发生了什么。 -
"JavaScript 是否提供了任何方法让我们立即调用函数声明而不用括号括起来?" - 是的 - 它只需要消除它是函数表达式而不是函数声明的歧义,这可以通过例如以任何运算符为前缀(例如
!function() { .... })。 “为什么它给函数声明一个错误,而不是函数表达式?”你有没有注意到 IIFE 是什么意思? “立即调用函数表达式。”它不是 IIFD/E。函数调用是一个表达式 - 您不能在表达式中使用语句。 -
@AadityaSharma 什么是“IIFE 模式”? IIFE 表示立即调用的函数表达式。如果你有一个函数表达式并立即调用它,那就是 IIFE。您的第二个示例正是如此 - 您调用的函数表达式。与
+function(){}相同,尽管它更 hacky - 它只是强制将其作为表达式而不是声明来计算。
标签: javascript function iife