arguments已被淘汰
原因:1、可变参数的出现,es6新特性 2、特性问题
arguments是一个伪数组,仅存在于函数中,作用是装载所有实参,伪数组用不了数组的方法
因为arguments是动态伪数组,数据变化带来的性能损耗较大
每次都会同步更新所有参数,如果参数过多则会出现问题
在开启严格模式后就会彻底禁用arguments
现在开发中基本不用arguments,可以使用可变参数完全替代arguments的功能
arguments.callee代表函数本身,一般用于匿名函数自调
后来由于es6的出现,不让用arguments了,所以callee和caller也无法使用了,官方建议给函数起名字
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
<script>
"use strict";
function func() {
let sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(func(10, 20)); // 30
console.log(func(10, 20, 30)); // 60
console.log(func(10, 20, 30, 40)); // 100
function fn(a) {
arguments[0] = 20;
console.log(a); // 20
/*
如果没有开启严格模式:
明明传进来的a是10,为什么上面打印出来会是20 ?
因为arguments是动态伪数组:如果arguments内部的数据发生变化,会自动同步到形参
因此,如果参数过多,就会导致平白无故的性能损耗
如果开启严格模式:
打印出来的a还是10,因为开启严格模式后,会彻底禁用arguments,arguments[0] = 20也就不生效了
*/
}
fn(10);
</script>