-1

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

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

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

为什么会弹出“b”?

4

5 回答 5

1

函数 (p1, p2, ... , pn, body)

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

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

检查:JavaScript 的“new”关键字被认为是有害的吗?

于 2013-02-28T06:16:39.833 回答
0

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

于 2013-02-28T06:17:47.973 回答
0

如果您不传递任何参数,则构建用作构造函数的函数不需要括号:

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

bob.is_alive;

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

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

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

于 2013-02-28T06:18:55.763 回答
0

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

var test1 = (function() {
  alert('b');
}());
于 2013-02-28T06:14:39.183 回答
0

请参阅JavaScript 中的“新”关键字是什么?有关新关键字的基本描述。

本质上,您将构造函数调用到一个新对象。我来给你展示。

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

jaguar = new Animal("Cool");

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

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

这就是为什么“b”被打印出来的原因。

于 2013-02-28T06:19:33.687 回答