例题:console.log的结果是[1,2,3,4,5]的是?
//A
function foo(x){
console.log(arguments)//实参列表
return x
}
foo(1,2,3,4,5)
//B
function foo(x){
console.log(arguments);
return x
}(1,2,3,4,5)
//不报错也不执行 函数(非函数表达式,函数表达式是可以执行的)后面接括号,如果括号是空的,会报错,但是里面有东西,相当于是数学运算的括号,就不当作函数执行了,这样的话就不报错了
//c
(function foo(x){
console.log(arguments);
return x
})(1,2,3,4,5)
//立即执行函数括号写外面也可执行,实参列表
//d
function foo(){//没写形参不代表参数没传进去,实参列表里有实参
bar.apply(null,arguments)//不涉及this的事,所以写null,不改变this指向了 相当于是bar(arguments) 把arguments当作参数传到了bar里面了
}
function bar(x){
console.log(arguments);
}
foo(1,2,3,4,5)
答案是:ACD
例2:
<script>
/*
function test(x,y,a){
arguments[2]=10;
console.log(a);
}
test(1,2,3)
*/
function test(x,y,a){
a=10;
console.log(arguments[2]);
}
test(1,2,3)
</script>
arguments是类数组,返回结果是object
<script>
(function(){
console.log(typeof(arguments));
}())
</script>