为什么新的Function()会返回此输出?

时间:2014-08-12 11:34:50

标签: javascript function

我正在阅读Cody Lindley所着的Javascript Enlightenment一书的第4章:功能()。

http://jsfiddle.net/4a860dkg/

我正在玩函数,想知道为什么在小提琴addNumbersA中返回匿名(num1,num2,/ ** /)而不是返回一个函数()

谁能告诉我为什么会这样?

编辑: 1.我想问的是,为什么不记录addNumbersA必须给我一个function()。 2.当我使用typeof(addNumbersA)时,我得到function而不是function() - 而addNumbersB会返回function()

如果我不够清楚,请道歉。

3 个答案:

答案 0 :(得分:1)

console.log(addNumbersA);返回:

function anonymous(num1,num2
/**/) {
return num1 + num2
} 

是因为它是一个功能表达。函数关键字用作表达式时,可以创建函数值。函数值可以执行其他值可以执行的所有操作 - 您可以在任意表达式中使用它,而不仅仅是调用它。可以将函数值存储在新位置,将其作为参数传递给函数,等等。

同样,console.log(addNumbersB);返回:

function (num1, num2) {
    return num1 + num2;
} 

你可以在chrome dev工具中测试一下,也许一些督察/ js repl有不同的快捷方式,这样你可能得不到EXACT输出(即只是在Firebug中得到'function()'。

答案 1 :(得分:0)

Function是函数的构造函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

将函数定义为Function构造函数的实例时,它不会被编译,而是存储为运行时字符串。这就是为什么它显示为函数定义而不是函数对象。

它们的功能相同,只是因为它是在执行时编译的,它只有全局闭包,除了自己的局部变量外,不知道本地闭包。

答案 2 :(得分:-1)

console.log(addNumbersB); // logs function() correct!

这不会运行您期望的功能。

这样做:

console.log(addNumbersB(2,2)); // logs 4 correct!

上面的返回4是因为我们调用函数并传递两个数字,然后由函数添加;

您提供的第一个示例是一种很少用于正常日常编码的方法,它从表示有效代码的字符串创建函数。