案例1:
function square(x) { return x*x; }
var s = square(); // Invoking with parentheses
console.log(square(2));
console.log(s(2));
案例2:
function square(x) { return x*x; }
var s = square;// invoking without parentheses
console.log(square(2));
console.log(s(2));
总是应该用()调用函数。那么为什么它在案例1中返回undefined,但在案例2中工作正常?
答案 0 :(得分:3)
在案例1中,您将调用('调用')square
函数的返回值分配给s
。但由于您没有提供任何参数,因此您要求它计算undefined * undefined
,即NaN
(“非数字”,即无法计算)。然后在你s(2)
结束时我假设你收到错误,因为s
不是函数。
在案例2中,您没有调用该函数,您只是将函数对象本身分配给var s
。这意味着当您执行s(2)
时它会起作用,因为s
是对square
函数的引用。
答案 1 :(得分:1)
在案例1中,您将s
分配给square()
的输出。因此,您没有传递任何内容,并将s
分配给undefined
。
将s
分配给square
,不带括号()
,因为您要将s
分配给函数square
,并且不是它的输出。
答案 2 :(得分:1)
此处案例2有效 - 请查看评论以便更好地理解,
Case 1:
function square(x) { return x*x; }
var s = square(); // Invoking without any parameter
console.log(square(2));//Invoking the actual function here with param
console.log(s(2));//This is incorrect as s is storing the result of the `square()`. So this doesn't work
Case 2:
function square(x) { return x*x; }
var s = square;// just declaring a variable
console.log(square(2));//Invoking the actual function here
console.log(s(2));//Invoking the actual function here with param. It works here