javascript函数之arguments学习

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);
-------->输出:
1
2
3
undefined

因为在调用函数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);
-------->输出:
1
2
3
undefined

arguments.callee是函数本身

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/weixin_39080782/article/details/78659938
今日推荐