我们可以说这是一个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指出这一点).

上一篇:python爬虫--selenium模块


下一篇:Javascript闭包和IIFE(立即调用函数表达式)