我是靠谱客的博主 悲凉草莓,最近开发中收集的这篇文章主要介绍arguments,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部