在Javascript中调用不带括号的函数()
案例1: 案例2:在Javascript中调用不带括号的函数(),javascript,function,invocation,Javascript,Function,Invocation,案例1: 案例2: function square(x) { return x*x; } var s = square(); // Invoking with parentheses console.log(square(2)); console.log(s(2)); 函数总是应该用()调用。那么为什么它在案例1中返回undefined,但在案例2中运行良好呢?在案例1中,您将调用('calling')square函数的返回值指定给s。但是,由于您没有提供任何参数,因此您要求它计算undef
function square(x) { return x*x; }
var s = square(); // Invoking with parentheses
console.log(square(2));
console.log(s(2));
函数总是应该用()调用。那么为什么它在案例1中返回undefined,但在案例2中运行良好呢?在案例1中,您将调用('calling')square函数的返回值指定给s
。但是,由于您没有提供任何参数,因此您要求它计算undefined*undefined
,即NaN
(“不是数字”,即无法计算)。然后在你做s(2)
的最后,我假设你得到了一个错误,因为s
不是一个函数
在案例2中,您没有调用函数,只是将函数对象本身分配给var s
。这意味着它在执行s(2)
操作时有效,因为s
是对square
函数的引用。在案例1中,您将调用('calling')square函数的返回值指定给s
。但是,由于您没有提供任何参数,因此您要求它计算undefined*undefined
,即NaN
(“不是数字”,即无法计算)。然后在你做s(2)
的最后,我假设你得到了一个错误,因为s
不是一个函数
在案例2中,您没有调用函数,只是将函数对象本身分配给
var s
。这意味着它在执行s(2)
操作时有效,因为s
是对square
函数的引用。在案例1中,您将s
分配给square()
的输出。因此,您没有传递任何内容,而是将s
分配给未定义的
将s
赋值给square
,不带括号()
之所以有效,是因为将s
赋值给函数square
,而不是它的输出。在案例1中,将s
赋值给square()
的输出。因此,您没有传递任何内容,而是将s
分配给未定义的
将s
分配给square
,不带括号()
的s
有效,因为您是将s
分配给函数square
,而不是它的输出。这里的情况2有效-请检查注释以便更好地理解
function square(x) { return x*x; }
var s = square;// invoking without 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));
就像C#中的代表?我不知道,但可能不是同一件事。。。关键是,在Javascript中,函数是一种对象类型,就像C#中的委托一样?我不知道,但可能不是同一件事。。。关键是,在Javascript中,函数与其他任何函数一样都是一种对象类型。调用发生在表达式s(2)
,而不是s=square
!?也没有参数。获取未处理的错误:“s”不是案例1中的函数。调用发生在表达式s(2)
,而不是s=square
!?也没有参数。获取未处理的错误:“s”不是案例1的函数。