我正在阅读Cody Lindley所着的Javascript Enlightenment一书的第4章:功能()。
我正在玩函数,想知道为什么在小提琴addNumbersA
中返回匿名(num1,num2,/ ** /)而不是返回一个函数()
谁能告诉我为什么会这样?
编辑:
1.我想问的是,为什么不记录addNumbersA
必须给我一个function()
。
2.当我使用typeof(addNumbersA)
时,我得到function
而不是function()
- 而addNumbersB
会返回function()
。
如果我不够清楚,请道歉。
答案 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是因为我们调用函数并传递两个数字,然后由函数添加;
您提供的第一个示例是一种很少用于正常日常编码的方法,它从表示有效代码的字符串创建函数。