<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      javascript 函數(shù)詳解2 -- arguments

      今天我們接著上篇文章來繼續(xù)javascript函數(shù)這個主題。今天要講的是函數(shù)對像中一個很重要的屬性--arguments。

      相關(guān)閱讀:

      arguments對象參數(shù)數(shù)組引用

      arguments是函數(shù)對象內(nèi)部一個比較特殊的類數(shù)組對象,這個對象中包含了所屬函數(shù)的參數(shù)列表,同時還包含一個指向函數(shù)原型對象的指針.

      我們先來討論下arguments中的參數(shù)數(shù)組,我們可以直接使用[index]的類似訪問數(shù)組的方式來訪問參數(shù)。要真正理解這特性,我們先要知道javascript的函數(shù)不關(guān)心你傳遞的參數(shù),因為在調(diào)用函數(shù)的時候,在函數(shù)內(nèi)部他接收的是一個參數(shù)數(shù)組,也就是說,理論上,我們可以在聲明函數(shù)的時候可以不聲明任何參數(shù),但是在調(diào)用的時候卻可以傳遞任意多的參數(shù)。

      如下代碼示例:

          function sayHi(){
          var name = arguments[0]||"default name",
          greeting = arguments[1]||" how are you";
          console.log("Hello "+name+","+ greeting);
          }
          //不傳參數(shù)調(diào)用
          sayHi();
          //傳一個參數(shù)調(diào)用
          sayHi("John");
          //傳兩個參數(shù)調(diào)用
          sayHi("John","你好!");

      執(zhí)行結(jié)果:

      接下來我們在看另外一段代碼,來探索arguments對象與參數(shù)列表的引用關(guān)系。

          function dosum(op1,op2){
          arguments[1] = 20;
          console.log(arguments[0]+op2);
          }
          dosum(1,1);

      我們先預(yù)測下執(zhí)行結(jié)果,2還是21?

      真正的執(zhí)行結(jié)果如下:

      針對上面的執(zhí)行結(jié)果我們可以抽象下argument與參數(shù)數(shù)組間的引用管理模型。

      arguments callee屬性

      arguments callee屬性是一個指向函數(shù)對象的指針,靈活使用該屬性可以大大降低代碼與函數(shù)名的耦合度,同時可以使代碼更加靈活。

      降低耦合度一般在遞歸運算中體現(xiàn)比較明顯。

      如下代碼:

          function factorial(num){
          if(num<=1){
          return 1;
          } else{
          return num*factorial(num-1);
          }
          }

      上面這段代碼最大的缺點就是與函數(shù)名factorial的耦合,正如我們一開始講的,函數(shù)名是一個指針,也就是一個變量,如果我們能保證該變量一直引用該函數(shù)對象,那么這段代碼就一直能返回我們所期望的結(jié)果。一旦該變量指向了其他對象,上面的代碼就會出錯,這時候 arguments.callee就能夠發(fā)揮作用了。修改如下:

          function factorial(num){
          if(num <= 1){
          return 1;
          }else{
          return num * arguments.callee(num -1 );
          }
          }

      這樣,這個函數(shù)對象的計算結(jié)果就與函數(shù)名factorial沒有關(guān)系了,就算之后做如下操作,我們依舊可以得到正確的結(jié)果。

      var afunc = factorial;

      factorial = null;

      afunc(3); // 同樣可以正確返回6

      通過arguments.callee的另外一個比較靈活的應(yīng)用如下:

          var otherfunc = (function(){
          console.log("do something cool");
          return arguments.callee;
          })();

      上面代碼所做的操作時立即執(zhí)行了一個函數(shù),并返回該匿名函數(shù)的引用,賦值給otherfunc,這時我們就可以在其他地方繼續(xù)調(diào)用這個函數(shù)。

      這樣的用法是我在項目中遇到的,頁面初始化時要做一些操作,也就是頁面加載完成后立即執(zhí)行該函數(shù),但是這個函數(shù)并不是一次性的,我們還需要在該頁面的其他時候來調(diào)用這個函數(shù),上面的代碼,個人會比先聲明一個函數(shù),然后在頁面加載完成后調(diào)用要優(yōu)雅一些,見仁見智罷了。

      原文來自:javascript 函數(shù)詳解2 -- arguments

      posted @ 2014-11-25 16:31  igeekbar  閱讀(362)  評論(0)    收藏  舉報

      中文互聯(lián): GBin1.com | RSS訂閱 | 郵件訂閱 | 手機訂閱

      主站蜘蛛池模板: 亚洲夜夜欢一区二区三区| 中文字幕亚洲高清在线一区| 米奇亚洲国产精品思久久| 国产精品人妻中文字幕| 精品一区二区三区在线观看l| 三河市| 中文字幕第一页国产| 国产麻豆放荡av激情演绎| 国产成人精品中文字幕| 国产一区二区日韩在线| 黑森林福利视频导航| 国产精品日韩av在线播放| 日韩女同一区二区三区久久 | 人妻少妇精品视频专区| 国产免费久久精品44| 国产卡一卡二卡三免费入口| 亚洲欧洲成人a∨在线| 日韩不卡一区二区三区四区| 免费看欧美日韩一区二区三区| 亚洲国产成人av毛片大全| 国产成年码av片在线观看| 精品亚洲无人区一区二区| 午夜福利宅福利国产精品| 国产99视频精品免视看9| 免费无码黄十八禁网站| 鄯善县| 你懂的亚洲一区二区三区| 成人免费无遮挡在线播放| av无码精品一区二区乱子| 日韩人妻无码精品久久| a∨变态另类天堂无码专区 | 狠狠躁夜夜躁人人爽天天古典 | 免费现黄频在线观看国产| 成人区人妻精品一区二区| 神马久久亚洲一区 二区| 五月婷之久久综合丝袜美腿 | 天天拍夜夜添久久精品大| 人妻日韩精品中文字幕| 日韩av一区二区精品不卡| 欧美日韩精品一区二区视频| 精品久久久久久国产|