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 不会指向全局对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?