黄子涵

4.5 调用表达式

JavaScript 中的调用表达式(invocation expression)是一种调用(或者执行)函数或方法的语法表示。它以一个函数表达式开始,这个函数表达式指代了要调用的函数。函数表达式后跟随一对圆括号,括号内是一个以逗号隔开的参数列表,参数可以有 0 个也可有多个,例如:

f(0)                // f是一个函数表达式;0是一个参数表达式 
Math.max(x,y,z)     // Math.max是一个函数;x, y和z是参数 
a.sort()            // a.sort是一个函数,它没有参数

当对调用表达式进行求值的时候,首先计算函数表达式,然后计算参数表达式,得到一组参数值。如果函数表达式的值不是一个可调用的对象,则抛出一个类型错误异常(所有的函数都是可调用的,即使宿主对象不是函数它也有可能被调用)。然后,实参的值被依次赋值给形参,这些形参是定义函数时指定的,接下来开始执行函数体。如果函数使用 return 语句给出一个返回值,那么这个返回值就是整个调用表达式的值。否则,调用表达式的值就是 undefined。函数调用——包括当形参表达式的个数和函数定义中实参的个数不匹配的时候的运行情况。

任何一个调用表达式都包含一对圆括号和左圆括号之前的表达式。如果这个表达式是一个属性访问表达式,那么这个调用称做“方法调用”(method invocation)。在方法调用中,执行函数体的时候,作为属性访问主题的对象和数组便是其调用方法内 this 的指向。这种特性使得在面向对象编程范例中,函数(其OO名称为“方法”)可以调用其宿主对象。

并不是方法调用的调用表达式通常使用全局对象作为 this 关键字的值。然而在ECMAScript 5 中,那些通过严格模式定义的函数在调用时将使用 undefined 作为this 的值,this 不会指向全局对象。

posted @ 2022-05-25 17:04  黄子涵  阅读(86)  评论(0编辑  收藏  举报