在没有括号的Javascript中调用函数()

时间:2015-04-01 20:46:46

标签: javascript function invocation

案例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中工作正常?

3 个答案:

答案 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