【发布时间】:2017-06-03 14:41:59
【问题描述】:
正如您在 Javascript 中所知道的,将以下表达式用作 IIFE(I立即I调用 F unction Expression):
(function(){
//code ...
})();
我想知道我们是否可以说以下 表达式 是 IIFE(不需要返回值时):
new function(){
//code ...
}
或者
new function(global){
//code..
}(this);
即使它是一个对象。谢谢。
答案:
[感谢@le_m、@vol7ron 和@Bergi,这是简短的回答] 我们可以说他下面的表达式是一个IIFE(I立即I调用Function Expression) ?
new function(){
//code ...
}
或者
new function(global){
//code..
}(this);
答案是否。 那是什么? 它只是一个带有匿名构造函数的未命名对象,所以我们在这里不讨论函数 (plain and simple)。
【问题讨论】:
-
如果您希望其他开发人员理解您所指的内容,则不是。
-
我很惊讶这种模式确实有效,还没有遇到过。函数中的代码会立即执行,所以我猜你实际上可以称它为 IIFE
-
是的@Bbird,但这通常是不好的做法。但是,由于建议将
'use strict';放在功能块内,这并不意味着这在未来不会成为普遍接受的做法。 -
@vol7ron 你是说模式本身是不好的做法吗?在为 ES2015 之前的环境编码时,我经常使用它。当您想要构造一个对象并为至少一个键名评估表达式时,它非常有用,因为在 ES2015 中添加计算属性名称之前,您无法使用对象字面量来执行此操作。
-
@Paulpro 是的,出于与
所述的相同原因,这不是常见的做法,因此是不好的做法。社区已经从需要更少代码和更高性能的地方转变为需要更好的可维护性的地方。大量研究表明,当维护成本(由于时间、复杂性等)较低时,可以节省更多的钱。当然,你可能使用得当——我无法从这里做出判断;)
标签: javascript iife