arguments 对象
定义一个函数,如果不确定用户是否传入了参数,或者不知道用户传入的参数有几个,无法进行计算。但如果已知参数的个数和值,就可以使用 arguments 。
arguments 对象,获取函数调用时传入了几个参数。取得是实参。
第一题
function foo(a) {
alert(arguments.length);
}
foo(1, 2, 3);
- 1
- 2
- 3
- undefined
答案: 3
解析:arguments 取的是实参的个数,而foo.length取的是形参个数。
- arguments 对象是所有(非箭头函数)函数中可以用的局部变量。
- arguments 对象不是一个 Array 。它类似于 Array ,但是出了 length 属性和索引元素之外并没有任何 Array 的属性。
- 对 arguments 对象 使用 typeof ,返回的是 “object”。但是对arguments[0] 使用 typeof 得到的是单个参数的类型。
例子
遍历参数求和
function add() {
var sum =0,
len = arguments.length;
for(var i=0; i<len; i++){
sum += arguments[i];
}
return sum;
}
add() // 0
add(1) // 1
add(1,2,3,4); // 10
使用函数创建 HTML
function list(type) {
var html = '<' + type + 'l><li>';
var args = Array.prototype.slice.call(arguments, 1);
html += args.join('</li><li>');
html += '</li></' + type + 'l>'; // end list
return html;
}
let listHTML = list("u",'One', 'Two', 'Three')
console.log(listHTML)
// <ul><li>One</li><li>Two</li><li>Three</li></ul>
第三题
function foo(a) {
arguments[0] = 2;
alert(a);
}
foo(1);
- 1
- 2
- undefined
答案:2,实参可以直接从 arguments 数组中进行修改