我们可以说这是一个IIFE吗?! – 在Javascript中
作者:互联网
参见英文答案 > Is it right to think of a Javascript Function Expression that uses the ‘new’ keyword as ‘static’ 3个
正如您在Javascript中所知,将以下表达式用作IIFE(立即调用函数表达式)非常常见:
(function(){
//code ...
})();
我想知道我们是否可以说下面的表达式是IIFE(当不需要返回值时):
new function(){
//code ...
}
要么
new function(global){
//code..
}(this);
即使它是一个对象.谢谢 .
答案:
[感谢@le_m,@ vol7ron和@Bergi,这里是简短的回答]
我们可以说他的下面的表达式是IIFE(立即调用的函数表达式)吗?
new function(){
//code ...
}
要么
new function(global){
//code..
}(this);
答案是不.
那是什么?
它只是一个带有匿名构造函数的未命名对象,所以我们不是在谈论函数(plain and simple).
解决方法:
新功能(){…}是IIFE吗?
现在,IIFE代表立即调用函数表达式. FunctionExpression的定义如下:
function BindingIdentifierₒₚₜ ( FormalParameters
) { FunctionBody }
那么,我们处理函数表达式吗?我们analyze your syntax:
"type": "ExpressionStatement",
"expression": {
"type": "NewExpression",
"callee": {
"type": "FunctionExpression",
"params": [],
"body": {
...
},
"arguments": []
}
这向我们展示了您的代码不是函数表达式,但它包含函数表达式作为NewExpression的一部分.
这个表达式是否立即被调用?在某种程度上,是 – 请参阅[[Construct]] invocation.立即调用构造函数.
尽管如此,我不会将整个事情称为IIFE,因为外部表达式不是函数表达式.有些人将此表达式称为Immeditately Invoked Constructor or IIC(感谢@ vol7ron,@ Berger指出这一点).
标签:javascript,iife 来源: https://codeday.me/bug/20190608/1196875.html