亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript中arguments,callee,caller詳解

 更新時間:2016年03月16日 11:55:16   投稿:hebedich  
javascript中arguments,caller,callee 是什么? 在javascript 中有什么樣的作用?本篇會對于此做一些基本介紹。希望大家能夠喜歡。

arguments是什么?

arguments是函數(shù)調(diào)用時,創(chuàng)建的一個類似的數(shù)組但又不是數(shù)組的對象,并且它存儲的是實際傳遞給函數(shù)的參數(shù),并不局限于函數(shù)聲明的參數(shù)列表哦。

尼瑪,什么意思?

寫個demo看看,代碼見下

<!DOCTYPE html>
  <head>
    <title>arguments</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>
    <script>
      function obj(){
        //利用instanceof判斷arguments
        console.log( 'arguments instanceof Array? ' + (arguments instanceof Array) );
        console.log( 'arguments instanceof Object? ' + (arguments instanceof Object) );
        console.log(arguments);
      }
      obj();
    </script>
  </body>
</html>

運行該代碼,通過chrome調(diào)試器,可得下圖

我利用instanceof判斷arguments,從打印的效果看,arguments是一個對象。

然后展開打印出的arguments,可以從上圖得知,它里面包括了許多屬性,callee也在內(nèi)。

接下來,我們修改上面的代碼,在調(diào)用obj函數(shù)時,給它傳遞參數(shù),但obj函數(shù)是沒有參數(shù)的。

具體代碼見下

<!DOCTYPE html>
  <head>
    <title>arguments</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>
    <script>
      function obj(){
        console.log( 'arguments instanceof Array? ' + (arguments instanceof Array) );
        console.log( 'arguments instanceof Object? ' + (arguments instanceof Object) );
        console.log(arguments);
      }
      //向obj傳遞參數(shù)
      obj('monkey','love',24);
    </script>
  </body>
</html>

通過chrome調(diào)試器,可得下圖

大家可以看見,arguments包含了三個我們給它傳遞的參數(shù)”monkey”,”love”,24。

所以說,為什么arguments是存儲的實際傳遞給函數(shù)的參數(shù)呢,而不是函數(shù)聲明的參數(shù)。

callee是什么?

callee是arguments對象的一個成員,它的值為“正被執(zhí)行的Function對象”。

什么意思呢?

我們寫個demo,看看輸出結(jié)果就知道啦。

代碼和結(jié)果圖見下

<!DOCTYPE html>
  <head>
    <title>callee</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>
    <script>
      function obj(){
        //利用callee
        console.log(arguments.callee);
      }
      obj();
    </script>
  </body>
</html>

從上面的圖片可知,arguments.callee是指向參數(shù)arguments對象的函數(shù),在這里就是obj咯。

caller是什么?

caller是函數(shù)對象的一個屬性,該屬性保存著調(diào)用當前函數(shù)的函數(shù)。

注意,是調(diào)用。不僅僅包含閉包哦。如果沒有父函數(shù),則為null。

還是老樣子,我們一直來寫個demo看看。

代碼如下:

<!DOCTYPE html>
  <head>
    <title>caller</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>
    <script>
      //child是parent內(nèi)的函數(shù),并在parent內(nèi)執(zhí)行child
      function parent(){
        function child(){
          //這里child的父函數(shù)就是parent
          console.log( child.caller );
        }
        child();
      }
      //parent1沒有被別人調(diào)用
      function parent1(){
        //這里parent1沒有父函數(shù)
        console.log(parent1.caller);
      }
      //parent2調(diào)用了child2
      function parent2(){
        child2();
      }
      function child2(){
        console.log(child2.caller);
      }
      /*執(zhí)行
       parent里嵌套了child函數(shù)
       parent1沒有嵌套函數(shù)
       parent2調(diào)用了child2,child2不是嵌套在parent2里的函數(shù)
      */
      parent();
      parent1();
      parent2();
    </script>
  </body>
</html>

打開chrome調(diào)試器,可得下效果圖

結(jié)合代碼和上圖理解,這下理解了caller了么?

相關(guān)文章

最新評論