Cod*_*iac 1 javascript function iife
当我们使用独立的函数语句作为IIFE时,我们需要对其进行包装()以使其起作用
// IFFE
(function a(){
console.log('Hello')
}());
// IFFE
(function a(){
console.log('Hello')
})()Run Code Online (Sandbox Code Playgroud)
如果我们不包装()代码,则会产生语法错误
function a(){
console.log('Hello')
}()Run Code Online (Sandbox Code Playgroud)
但是,当我们将其用作函数表达式时,不需要用 ()
let a = function a(){
console.log('Hello')
}()Run Code Online (Sandbox Code Playgroud)
那么,为什么()要在将其用作函数语句时需要包装它呢?
解释器解析Javascript文本时,如果遇到新行function a,它将开始将其解释为名为的函数的函数声明a。最终,它将通过到达功能块的末尾}。如果()在那之后放一个,它将尝试将a解析(为一个表达式的开始-但是一个表达式必须求值到某物,它不能为空,所以当它看到时),它将抛出。
(您可以将一些内容放在括号中,但它只是一个未使用的表达式,因此不会调用该函数:
function foo() {
console.log('foo');
}(123);
console.log('done');Run Code Online (Sandbox Code Playgroud)
)
把(所述前function a确保了解释解析function a随后作为表达式(可以由使用,像值()以后谈到),而不是一个语句(做什么-等声明在该范围中可用的功能-但确实不求值)。
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |