• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 一般模式
  2. 2. 严格模式

函数形参与arguments

2017-10-14 00:28:25
总字数 479
预计阅读时间 1 分钟

在之前我们知道 , 在JS当中函数的形参与调用时传入的实参并不需要必须对应
在函数的内部有一个对象arguments , 这是一个类数组 , 其中包含调用时传入的实参
当然函数在调用的时候 , 会按照形参的位置给形参赋值

但是如果我们在函数内部对形参进行赋值 , 或者对arguments当中的元素进行赋值 , 会出现怎样的情况呢

这在一般模式和严格模式下会有不同的行为

一般模式

调用时对于没有对应到实参的形参进行赋值

1
2
3
4
5
6
7
8
9
10
11
function func1(arg0, arg1) {
arg1 = 10;
console.log(arg1, arguments[1]);
}
func1(19);// 10 undefined

function func2(arg0, arg1) {
arguments[1] = 10;
console.log(arg1, arguments[1]);
}
func2(21);// undefined 10

上面两个函数都有两个形参 , 实际调用时传入了一个实参 , arg1是没有与实参对应的
这时候对形参赋值 , 或者对arguments当中对应的元素赋值 , 各自的行为都是独立的 , 彼此不会产生影响

形参与实参有对应的情况

1
2
3
4
5
6
7
8
9
10
11
function func1(arg0) {
arg0 = 10;
console.log(arg0, arguments[0]);
}
func1(19);// 10 10

function func2(arg0) {
arguments[0] = 10;
console.log(arg0, arguments[0]);
}
func2(21);// 10 10

可以看到 , 在这种情况下 , 形参与arguments当中的元素是双向绑定的 , 修改一个会自动影响另一个

严格模式

在严格模式下同样执行与上面类似的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"use strict";
function func1(arg0) {
arg0 = 10;
console.log(arg0, arguments[0]);
}
func1(19);// 10 19

function func2(arg0) {
arguments[0] = 10;
console.log(arg0, arguments[0]);
}
func2(21);// 21 10

function func3(arg0) {
arguments[0] = 10;
console.log(arg0, arguments[0]);
}
func3();// undefined 10

function func4(arg0) {
arg0 = 10;
console.log(arg0, arguments[0]);
}
func4();// 10 undefined

可见严格模式之下 , 无论是哪种情况 , arguments与形参都是独立的 , 不会进行绑定 , 之间互不影响

  • JavaScript
  • 函数
  • JavaScript

扫一扫,分享到微信

变量的定义提升
CSS动画(3)-animation 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆