JavaScript 之函数表达式 arguments 详解
This
与arguments
- 当一个函数运行的时候 函数内部能引用的变量有这么几种
AO
arguments
this
- 对于
arguments
和this
函数都有自己的arguments
和this
且不进行链式查找 arguments
是什么?- 答:
arguments
是收到的实参的副本 在词法分析中 - 首先形参形成
AO
属性 值为undefined
- 当实参传来时 再修改
AO
的相应属性 - 并把收到的实参收集起来放到一个
arguments
对象里面t(a,b,c){}
为例:调用 时t(1,2,3,4,5)
个参数 此时AO
属性只有a,b,c
三个属性 但是arguments
有1,2,3,4,5
所有的值
- 答:
- 对于超出形参个数的实参可以通过 argument 来获得
argument
的索引从0 1 2..
递增 与实参一一对应argument.length
属性代表实参个数arguments
一定不是数组,但是长得像数组的一个对象而已 虽然也有length
属性
arguments
每个函数都有 因此只会在内部找自身的argument
无法引用到外部的arguments
function t(a,b,c){ // 参数实际来 AO 的属性 有几个形参 就形成几个 AO 属性 arguments 就代表这个函数的额参数
console.log(a);//1
console.log(b);//2
console.log(c);//3
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
console.log(arguments[2]); // 3
a = 90;
console.log(a);//90
console.log(arguments[0]); // 90 互为副本 arguments 有一个好处 它接收的实际是你传过来的参数 arguments 接收的是所有的实参
console.log(arguments[0]);
console.log(arguments[3]); // 4
console.log(arguments[4]); // 5
}
t(1,2,3,4,5);
// 利用 argument 的特点完成其他语言的函数重载
// 求圆形面积 矩形面积 三角形面积
function area(){
if(arguments.length ==1){
alert(3.14*arguments[0]*arguments[0]);
}else if(arguments.length ==2){
alert(arguments[0]*arguments[1]);
}else if(arguments.length ==3){
alert(arguments[0]+arguments[1]+arguments[2]);
}else{
return null;
}
}
area(10,20,30);
function t(){
var age = 22;//age 在链的 AO 上
alert(arguments[0]); // 1
alert(arguments[1]); // 2
function d(){
alert(arguments[0]); // a
alert(arguments[1]); // undefined 此时这个 argument 不会找到上面的 arguments[1]去 只有 Ao 才会按照链来查找 argument 不会按照链查找
}
d('a');
}
t(1,2);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论