javascript函数之arguments学习

来源:互联网 发布:当爱已成往事 知乎 编辑:程序博客网 时间:2024/05/21 17:36

javascript函数之arguments学习

js函数有两个特殊的对象,一个是this,另一个是arguments。

示例代码

function say(a1,a2,a3){ console.log(arguments);}say(1,2,3);

输出

(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]

从上面输出内容可以看出,arguments类似一个数组,其实小的乍一看就是一个数组,但是书上说这是一个类数组对象,小的也没太搞明白什么意思,估计又能通过索引取值,又有内部方法吧。

arguments的主要用途是保存函数的所有参数

function say(a1,a2,a3){   console.log(arguments[0])   console.log(arguments[1])   console.log(arguments[2])   console.log(arguments[3]) } say(1,2,3);-------->输出:123undefined

因为在调用函数say时只传递了三个参数,所以我们最后稳稳地只取出了三个参数的值
当然,arguments保存的不是函数声明的参数,而是真正调用时所传递的参数。

function say(a1,a2){  console.log(arguments[0])  console.log(arguments[1])  console.log(arguments[2])  console.log(arguments[3])}say(1,2,3);-------->输出:123undefined

arguments.callee是函数本身

可能我的语义不准确,但是应该应该能够帮助同学们理解一二
示例

function say(a){  console.log(a)  if (a>1) {    arguments.callee(a-1);  }}say(2);-------->输出:21

诶,这不就是递归吗?这有什么鸟用啊?

俗话说存在就有它的意义,下面我们来看这个示例,使用方法名递归

function say(a){   console.log(a)   if (a>1) {     say(a-1)   } } newSay = say say = function (){   console.log('我变成了其他函数') } newSay(2) -------->输出: 2 我变成了其他函数

看到这里相信大家可以理解,在程序运行后看,say已经不指向原来的函数了,它变了。
所以,这个时候,我们的arguments.callee就能缓解这种尴尬了

function say(a){   console.log(a)   if (a>1) {     arguments.callee(a-1)   } } newSay = say say = function (){   console.log('我变成了其他函数') } newSay(2) -------->输出: 2 1
原创粉丝点击