2016-05-10 69 views
0

之间的差异,同时在互联网上搜索我发现了两种写作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); 

在i既方法上面使用我发现这些2.

之间没有差别是否有任何区别这2个还是有使用函数构造函数的吗?

+0

第一种形式将无法访问任何本地范围的变量。而且,效率较低,因为它必须在运行时进行分析。一般来说,没有理由使用它。 –

+0

第一个将任意字符串转换为可执行函数。除非字符串已经过验证,否则不安全。 – gurvinder372

+1

你可能已经找到了,不是吗?在3000+的声誉,我真的希望你先搜索。 – Tomalak

回答

2

Object-Oriented JavaScript - Second Edition:当使用 Function()构造,首先(如 字符串),然后通过参数名的源代码的函数(再次 作为字符串)的身体。 JavaScript引擎需要评估您传递的源代码 并为您创建新功能。此源代码 评估存在与eval()函数 相同的缺陷,因此如果可能,则使用函数()构造函数定义函数应避免使用 。

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's answer