飞跃高山与大洋的鱼飞跃高山与大洋的鱼
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
首页
先看
计算机
  • 数学
  • Linux
  • Arch
  • Manjaro
  • Ubuntu
  • CentOS
  • Kubernetes
  • Web
  • JavaScript
  • TypeScript
  • CSS
  • Canvas
  • Vue
  • Vite
  • NuxtJS
  • Webpack
  • Flutter
  • D3
  • Jest
  • WeApp
  • Utils
  • Nodejs
  • Nestjs
  • Golang
  • Nginx
  • Traefik
  • MySQL
  • MongoDB
  • Redis
  • Docker
算法
  • 像素风
  • Git
  • Github
  • VSCode
  • Chrome
  • Google
  • Bookmark scripts
  • 导航 🎉
  • VuePress 侧边栏插件
  • VuePress 官网
🚇 开往
  • JAVASCRIPT

    • JavaScript
    • 语句和表达式
    • 数组空位
    • 无法访问 undefined、null 的属性
    • currying
    • 装饰器 Decorator
    • ES6 的简单使用
    • Error 类型
    • 事件队列
    • 隐式转换
    • 调用表达式
      • 作为值
    • 函数调用
    • 运算符优先级
    • 原型链
    • 正则 exec
    • 作用域与闭包
    • 一步步启用 babel7
    • 什么是 this
    • typeof
    • 全局属性 undefined
    • 自增/减

调用表达式

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

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

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

作为值

引申:JavaScript 中,变量没有类型,值才有类型。

在 JavaScript 中,函数不仅是一种语法,也是值,也就是说可以将函数赋值给变量,存储在对象的属性或数组的元素中,作为参数传入另外一个函数等(callback):

function square(x) { return x*x; }
// 函数的名字实际上是看不见的,square 仅仅是变量的名字,这个变量指代函数对象
var s = square;
square(4); // 16
s(4); // 16

// 匿名函数
var o = {square: function(x) { return x*x; }}; 
var a = [function(x) { return x*x; }, 4];
o.square(4); // 16
a[0](a[1]); // 16,先计算函数表达式,然后计算参数表达式
编辑文档!
上次更新:
贡献者: shanyuhai123
Prev
隐式转换
Next
函数调用