arguments
Posted mj-my
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arguments相关的知识,希望对你有一定的参考价值。
arguments它是一个类数组对象。它是js的一个内置对象,当调用函数时,就会实例化出这个对象。
特点:
1.arguments的__proto__指向的是object。说明它是一个对象。
2.arguments可以把传入的实参个数以数组的形式保存起来。
3.arguments的属性,1.length,2.callee(callee是一个指向正在执行的函数的指针)它在严格模式下会失效。
4.arguments可以实现重载机制。
5.arguments可以通过callee属性实现递归。
案例:
1.简单的实例。印证上面1.2点。
function showargs() { console.log( arguments );//[1,2,3,4,5],__proto__:object. } showargs(1,2,3,4,5);
2.callee属性。
function showcallee() { var a = 1; var b = 2; var c = a + b; console.log(arguments.callee);//完整打印这段代码, return c; } showcallee();
3.实现重载
function foo() { var len = arguments.length, sum = 0; for(;len--;){ sum += arguments[len]; } return sum; } console.log( foo(1,2,3) ); //6 console.log( foo(1,3) ); //4 console.log( foo(1,2,3,5,6,2,7) ); //26
4.callee实现递归
普通的递归
function fa(num) { if(num<=1) { return 1; }else { return num * fa(num-1); } } console.log(fa(5));//120
callee的递归
function factorial(n){ if(n<=1){ return 1; }else{ return n*arguments.callee(n-1); } } console.log(factorial(5));//120
但是callee在严格模式下会失效。
更好的解决方法是:使用命名函数来达到相同的效果
var factorial=(function f(n){ if(n<=1){ return 1; }else{ return n*f(n-1); } }); var anotherF=factorial; factorial=null; alert(anotherF(2));
以上是关于arguments的主要内容,如果未能解决你的问题,请参考以下文章
RuntimeError: ‘lengths’ argument should be a 1D CPU int64 tensor, but got 1D cuda:0 Long tensor(代码片段