function()和new Function()

时间:2016-05-10 06:42:56

标签: javascript function constructor

在互联网上搜索时,我找到了两种编写javascript函数的方法。

一个是Function()构造函数

var myFunction = new Function("a", "b", "return a * b");

var x = myFunction(4, 3);

其次是简单的定义功能

var myFunction = function (a, b) {return a * b};

var x = myFunction(4, 3);

当我在上述两种方法中使用时,我发现这两种方法没有区别。

这两个之间是否存在差异,或者是否使用了函数构造函数??

1 个答案:

答案 0 :(得分:2)

  

Object-Oriented JavaScript - Second Edition :使用时   Function()构造函数,首先传递参数名称(as   字符串)然后是函数体的源代码(再次   作为一个字符串)。 JavaScript引擎需要评估源代码   你传递并为你创建新功能。这个源代码   评估遇到与eval()函数相同的缺点,   所以使用Function()构造函数定义函数应该是   尽可能避免。

 var first = new Function(
     'a, b, c, d',
     'return arguments;'
 );

 first(1, 2, 3, 4); // [1, 2, 3, 4]

 var second = new Function(
     'a, b, c',
     'd',
     'return arguments;'
 );

 second(1, 2, 3, 4); // [1, 2, 3, 4]

 var third = new Function(
     'a',
     'b',
     'c',
     'd',
     'return arguments;'
 );

 third(1, 2, 3, 4); // [1, 2, 3, 4]
  

最佳实践:不要使用Function()构造函数。与eval()一样    和setTimeout(),总是试图远离传递JavaScript代码    作为一个字符串。

有什么区别?请参阅@ Greg的answer