概述
1.什么是arguments:它是一个类数组对象,代表传给一个function的参数列表。它的内容表示了函数执行时传入函数的所有参数,可以用arguments[0],arguments[1]...来获取单个参数。可以用arguments.length来获取参数个数
<script>
function test(){
console.log(arguments);
}
test('a','b',0,{foo:'hello arguments'});
</script>
2.通常可以采用Array.prototype.slice.call(arguments);来将其转换成数组,或者[].slice.call(arguments);但是不能将函数的arguments泄露或者传递出去,如
// Leaking arguments example1:
function getArgs() {
return arguments;
}
// Leaking arguments example2:
function getArgs() {
const args = [].slice.call(arguments);
return args;
}
// Leaking arguments example3:
function getArgs() {
const args = arguments;
return function() {
return args;
};
}
但是我们可以这样:
function getArgs() {
const args = new Array(arguments.length);
for(let i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
return args;
}
3.修改它的值
它有隐藏的参数
window.onload = function(){
abc(1,2,3);
}
function abc(x,y){
alert(x+','+y);//1,2
}
在严格模式下:
function test(a){
"user strict";
console.log(a,arguments[0]);//1,1
a = 10;
console.log(a,arguments[0]);//10,1
}
test(1);
在非严格模式下:
function test(a){
console.log(a,arguments[0]);//1,1
a = 10;
console.log(a,arguments[0]);//10,10
}
test(1);
实现递归:
function add(n){
if(n==1){
return 1;
}else{
return n+arguments.callee(n-1);
}
}
alert(add(3));
4.函数之间参数的传递
function test(a){
b.apply(this,arguments);
}
function b(){
console.log(arguments);//[1]
}
test(1);
5.利用arguments实现重载
在javascript中没有重载
function add(num1, num2) {
console.log("Method one");
return num1 + num2;
}
function add(num1, num2, num3) {
console.log("Method two");
return num1 + num2 + num3;
}
add(1, 2);//Method two
add(1, 2, 3);//Method two
but...
function add(num1, num2, num3) {
if (arguments.length === 2) {
console.log("Result is " + (num1 + num2));
}
else if (arguments.length === 3) {
console.log("Result is " + (num1 + num2 + num3));
}
}
add(1, 2);//Result is 3
add(1, 2, 3)//Result is 6
6.es6中的arguments
扩展操作符可以将 arguments 展开成独立的参数。
function test(a){
console.log(...arguments);
}
test(1,2,3);//1 2 3
7.类数组
我们可以自己创建一个类数组:
function Foo(){
}
Foo.prototype = Object.create(Array.prototype);
const foo = new Foo();
foo.push('a');
console.log(foo,foo.length);
此时的Foo示例拥有Array的所有方法,但是类型不是Array.
最后
以上就是悲凉草莓为你收集整理的arguments的全部内容,希望文章能够帮你解决arguments所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复