Evan's blog Evan's blog
首页
关于
  • 分类
  • 标签
  • 归档
  • H5&CSS3
  • JS
  • TS
  • Node
  • Webpack
  • Vue2
  • Vue3
  • 微信小程序
  • Andorid
  • Flutter
推荐
GitHub (opens new window)

conanan

真相只有一个
首页
关于
  • 分类
  • 标签
  • 归档
  • H5&CSS3
  • JS
  • TS
  • Node
  • Webpack
  • Vue2
  • Vue3
  • 微信小程序
  • Andorid
  • Flutter
推荐
GitHub (opens new window)
  • 入门

  • 理解

    • 1 理解-0 函数的定义与参数
    • 1 理解-1 理解函数调用
      • 隐式函数参数
      • arguments参数
      • this—函数上下文
    • 1 理解-2 this—函数上下文
    • 1 理解-3 作用域
    • 1 理解-4 闭包
  • 语法

  • 异步

  • 模块化

  • 网络

  • DOM&BOM

  • 常用框架

  • JS
  • 理解
xugaoyi
1984-01-24
目录

1 理解-1 理解函数调用

# 理解函数调用 🔥

# 隐式函数参数

除了在函数定义中显式声明的参数之外,函数调用时还会传递两个隐式的参数:arguments和this,并且可以在函数内正常访问。

# arguments参数

arguments参数是传递给函数的所有参数集合。无论是否有明确定义对应的形参,通过它我们都可以访问到函数的所有参数。借此可以实现原生JavaScript并不支持的函数重载特性,而且可以实现接收参数数量可变的可变函数。其实,借助剩余参数(restparameter),对arguments参数的需求已经大大减少了。

arguments对象有一个名为length的属性,表示实参的确切个数。通过数组索引的方式可以获取单个参数的值。但是arguments对象仅是一个类数组的结构,避免把它参数当作数组使用,尝试使用数组的方法时会报错!剩余参数是真正的Array实例

实现一个求和函数,来计算任意数量参数的和:

function sum(){
    let sum = 0
    for(let i = 0; i < arguments.length; i++){
        sum += arguments[i]
    }
    return sum
}

sum(1,2,3)
sum(2,3,4,5)
1
2
3
4
5
6
7
8
9
10

**arguments对象可以与剩余参数、默认参数和解构赋值参数结合使用注意**

在严格模式下,剩余参数、默认参数和解构赋值参数的存在不会改变 arguments对象的行为,但是在非严格模式下就有所不同了

当非严格模式中的函数没有包含剩余参数、默认参数和解构赋值,那么arguments对象中的值会跟踪参数的值(反之亦然)

function func(a) { 
  arguments[0] = 99;   // 更新了arguments[0] 同样更新了a
  console.log(a);
}
func(10); // 99
1
2
3
4
5
function func(a) { 
  a = 99;              // 更新了a 同样更新了arguments[0] 
  console.log(arguments[0]);
}
func(10); // 99
1
2
3
4
5

当非严格模式中的函数有包含剩余参数、默认参数和解构赋值,那么arguments对象中的值不会跟踪参数的值(反之亦然)。相反, arguments反映了调用时提供的参数:

function func(a = 55) { 
  arguments[0] = 99; // updating arguments[0] does not also update a
  console.log(a);
}
func(10); // 10
1
2
3
4
5
function func(a = 55) { 
  a = 99; // updating a does not also update arguments[0]
  console.log(arguments[0]);
}
func(10); // 10
1
2
3
4
5
function func(a = 55) { 
  console.log(arguments[0]);
}
func(); // undefined
1
2
3
4

# this—函数上下文

函数的调用方式对函数内代码的执行有很大的影响,主要体现在this参数以及函数上下文是如何建立的。

编辑 (opens new window)
上次更新: 2022/03/23, 17:55:39
1 理解-0 函数的定义与参数
1 理解-2 this—函数上下文

← 1 理解-0 函数的定义与参数 1 理解-2 this—函数上下文→

最近更新
01
重点
04-12
02
搭建项目
04-04
03
TS补充
03-30
更多文章>
Theme by Vdoing | Copyright © 2019-2022 conanan | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式