03-引用调用
6.2 引用调用
在JavaScript中,函数是一个对象,像其他对象一样,可以被传递和赋值。所以理解函数调用和引用之间的差别很重要。当在函数名后面添加圆括号时,JavaScript就知道要调用它,然后执行函数体,最后返回结果。如果没有圆括号,仅仅是在引用这个函数,并没有调用它。试着在console中执行下面的代码:
getGreeting(); // 打印"Hello, World!"
getGreeting; // 函数getGreeting()
能够像引用其他值一样引用函数这点能给编程语言带来很大的灵活性。比如,可以把一个函数赋值给一个变量,就可以通过其他名字来调用这个函数:
const f = getGreeting;
f(); // "Hello, World!"
或者把函数赋值给一个对象的属性:
const o = {};
o.f = getGreeting;
o.f(); // "Hello, World!"
甚至是把函数添加到数组里:
const arr = [1, 2, 3];
arr[1] = getGreeting; // 现在的arr是 [1, function getGreeting(), 2]
arr[1](); // "Hello, World!"
最后一个例子清楚地表示了圆括号的作用。如果JavaScript遇到圆括号跟在一个值后面,这个值就会被当做函数,同时调用这个函数。在上例中, arr[1] 是一个计算值的表达式。这个值后面有一对圆括号,这就是在告诉JavaScript这个值是一个函数,并且需要被执行。
如果在值不是函数的变量后面添加圆括号,JavaScript就会报错。比如,执行“ `whoops()` ”的结果就是 `TypeError` 的错误: `"whoops"is not a function.`
如果在值不是函数的变量后面添加圆括号,JavaScript就会报错。比如,执行“ `whoops()` ”的结果就是 `TypeError` 的错误: `"whoops"is not a function.`