function(){}和new function(){}之间的区别

时间:2013-02-28 06:12:06

标签: javascript

在这个问题中,我不想问“功能”,我想问“功能”难题

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

    var test1 = new function() {
        alert('b');
    };
</script>

为什么它会弹出“b”?

5 个答案:

答案 0 :(得分:1)

功能(p1,p2,...,pn,body)

当使用一些参数p1,p2,...,pn,body调用Function函数时(其中n可能为0,即没有“p”参数,并且也可能没有提供body),采取以下步骤:

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

检查:Is JavaScript's "new" keyword considered harmful?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

new用于Javascript中的Factory模式。 它通过执行构造函数来创建并返回一个对象。在您的情况下,使用new

是没有意义的。

答案 3 :(得分:0)

如果你没有传递任何参数,那么构建用作构造函数的函数不需要parens:

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

bob.is_alive;

...但是无论你是否正在使用返回的对象,任何函数都可以作为构造函数调用...

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

这不会将功能保存在任何地方 - 它会立即在适当的位置运行它。

答案 4 :(得分:0)

有关新关键字的基本说明,请参阅What is the 'new' keyword in JavaScript?

基本上,您正在将构造函数调用到新对象。让我告诉你。

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

jaguar = new Animal("Cool");

唯一的区别是你和你所做的是在与定义新对象相同的行中声明该函数:

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

这就是打印出“b”的原因。