function(){}与new function(){}的区别

difference between function() {} and new function() {}

本文关键字:function 区别 new      更新时间:2023-09-26

在这个问题中,我不想问"Function",我想问"Function"难题

<script type="text/javascript">
    var test = function() {
        alert('a');
    };
    var test1 = new function() {
        alert('b');
    };
</script>

为什么会弹出"b"?

函数(p1, p2,…,pn,身体)

当使用一些参数p1, p2,…,pn, body(其中n可能为0,即没有" p "参数,并且也可能不提供body)调用Function函数时,将执行以下步骤:

创建并返回一个新的Function对象,就像在具有相同参数的新表达式中使用了标准内置构造函数Function一样。

check:Is JavaScript's "new"关键词被认为有害?

new function将执行该函数,您也可以使用IIFE(立即调用的函数表达式):

var test1 = (function() {
  alert('b');
}());

new用于Javascript中的工厂模式。它通过执行构造函数创建并返回一个对象。在您的情况下,使用new是没有意义的。

作为构造函数使用的函数不需要父类,如果你没有传递任何参数:

var Person = function () { this.is_alive = true; },
    bob = new Person;
bob.is_alive;

…但是任何函数都可以作为构造函数调用,不管你是否使用返回的对象…

new function () { console.log("Bob"); }

这不会将函数保存在任何地方——它会立即在适当的地方运行它。

参见What is the 'new'关键字在JavaScript?查看新关键字的基本描述。

本质上,你是在调用一个新对象的构造函数。我示范给你看。

var Animal = function(name) {
    alert("Animal Created: " + name);
}
jaguar = new Animal("Cool");

唯一的区别是在定义新对象的同一行声明函数:

jaguar = new function(name) {
    alert("Animal Created: " + name);
}