javascript代码实例教程-javascript(arguments)

发布时间:2019-02-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-javascript(arguments)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

事出有因

今天去做了金山网络招聘实习生的试卷,有一道题目确实让我有点在当时不太肯定,毕竟自己的脑袋还不是javascript解析器,然后回来就打开chrome的控制台,运行后就觉得自己要去总结这个知识点了。

题目如下(只能说大概,有点忘记,但是考察知识点是一样)

  • function foo(a,b,c){
  • c = 3;
  • console.LOG(arguments);
  • }
  • foo(1,2)
  • foo(1,2,undefined)

    确实当时看见这道题目的时候,心里还是有很多疑问的,最后只能归结成一个是arguments对象是什么时候才赋值?

    了解arguments

    arguments的基本信息1 它不是真正的数组,只是一个类数组的对象,具体两者有什么区别,这个不是我们这篇文章了解的重点;2 它创建于函数定义,并设置为null,赋值于函数调用,它是一个指向函数的参数列表的引用,是函数体访问形参的接口3 它只能作用于该函数的函数体,在外界访问这个对象会出错或者只是nullarguments奇葩行为1 因为它是类数组的对象,它具有一个length属性还有就是可以用下标来访问参数列表2 因为它是函数的属性,如果你在函数体中重新定义一个arguments变量,它会覆盖原来的arguments

    代码:

    • function foo(a,b,c){
    • VAR arguments = 1;
    • console.log(arguments);
    • }
    • foo(1,2)

      结果:1

      3 在非严格的情况下,我们可以通过arguments来修改参数列表

      代码:

      • function foo(a,b,c){
      • arguments[0] = "monkindey";
      • console.log(a);
      • }
      • foo(1,2)

        结果:"monkindey"

        那好吧,我们还是揭秘金山实习生招聘的笔试题

        foo(1,2)答案:[1,2]
        原因:arguments标示符在《javascript权威指南》中指出,它是指向实参对象的引用。实参对象是一个类数组,当实参对象改,那么arguments也会跟着改。而实参对象只有在函数调用时才赋值,比如上面实参对象就类似于{a:1,b:2},但是没有c,所以给c赋值,改变不了实参对象,而arguments是它的引用,所以它也没影响。foo(1,2,undefined)答案:[1,2,3]
        原因:实参对象会是{a:1,b:2,c:undefined},而在函数体中再修改c的话,就会设置实参对象中的c为3。所以console.log(arguments)会变成[1,2,3]

        再练练兵

        函数内部声明的局部变量与形参同名
        • function foo(a,b,c){
        • var a = 3;
        • console.log(arguments[0]);
        • }
        • foo(1,2) 答案:3
          原因:个人觉得当我们调用一个函数,传入进去的实参,就是给一个函数中的形参赋值,其实相当于在函数定义一个局部变量,变量名就是那个形参名,上面的代码可以看成
          • function foo(a,b,c){
          • var a = 1;//传入实参的形参相当于在函数体中定义一个局部变量
          • var a = 3;
          • console.log(arguments[0]);
          • }
          • foo(1,2) 如果只是声明局部变量a,却不赋值,情况又不一样了
            • function foo(a,b,c){
            • var a ;
            • console.log(arguments[0]);
            • }
            • foo(1,2) 答案:1
              原因:上面的代码可以看成
              • function foo(a,b,c){
              • var a = 1;//传入实参的形参相当于在函数体中定义一个局部变量
              • var a ;//重复定义一个变量但是又不赋值,javascript解析器会把它忽略掉的(我的猜想)
              • console.log(arguments[0]);
              • }
              • foo(1,2)

                参考文献

                arguments MDN
                《javascript权威指南》
                JavaScript函数参数的可修改性

                觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

                脚本宝典总结

                以上是脚本宝典为你收集整理的javascript代码实例教程-javascript(arguments)全部内容,希望文章能够帮你解决javascript代码实例教程-javascript(arguments)所遇到的问题。

                如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

                本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
                如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。