<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Javascript 函數的學習

    時間:2024-09-11 20:50:40 JavaScript 我要投稿
    • 相關推薦

    Javascript 函數的學習

      每一個 Javascript 函數都能在自己作用域內訪問一個特殊的變量 - arguments。這個變量含有一個傳遞給函數的所有參數的列表。

    Javascript 函數的學習

      arguments 對象不是一個數組。盡管在語法上它跟數組有相同的地方,例如它擁有 length 屬性。但它并不是從 Array.prototype 繼承而來,實際上,它就是一個對象。

      因此,我們不能直接對 arguments 使用一些數組的方法,例如 push, pop 或 slice 等。 所以為了使用這些方法,我們就需要將其轉換為一個真正的數組。

      轉化為數組

      下面的代碼將會返回一個包含 arguments 對象所有元素的數組。

      Array.prototype.slice.call(arguments);

      由于轉化的速度很慢,所以在性能要求嚴格的程序中不建議這樣做。

      傳遞參數

      下面是一種比較推薦的方法,將 arguments 對象從一個函數傳遞到另一個函數。

      復制代碼 代碼如下:

      function foo() {

      bar.apply(null, arguments);

      }

      function bar(a, b, c) {

      // do stuff here

      }

      另外還有一個比較巧妙的方法,就是同時使用 call 和 apply 快速創(chuàng)建一個解綁的外層方法。

      復制代碼 代碼如下:

      function Foo() {}

      Foo.prototype.method = function(a, b, c) {

      console.log(this, a, b, c);

      };

      // Create an unbound version of "method"

      // It takes the parameters: this, arg1, arg2...argN

      Foo.method = function() {

      // Result: Foo.prototype.method.call(this, arg1, arg2... argN)

      Function.call.apply(Foo.prototype.method, arguments);

      };

      函數形參和 arguments 屬性的關系

      arguments 對象為它自身屬性和函數的形參都創(chuàng)建了 getter 和 setter 方法。

      因此,修改函數的形參會影響對應的 arguments 對象的屬性值,反之亦然。

      復制代碼 代碼如下:

      function foo(a, b, c) {

      arguments[0] = 2;

      a; // 2

      b = 4;

      arguments[1]; // 4

      var d = c;

      d = 9;

      c; // 3

      }

      foo(1, 2, 3);

      性能問題

      arguments 只在兩種情況下不會被創(chuàng)建,一是在函數內部被聲明為局部變量,二是當做函數的形參。其他情況,arguments 對象總是會被創(chuàng)建。

      由于 getter 和 setter 方法總是會隨著 arguments 對象的創(chuàng)建而創(chuàng)建,因此使用 arguments 對性能本身幾乎沒有影響。

      然而,有一種情形會嚴重影響 Javascript 的性能,那就是使用 arguments.callee。

      復制代碼 代碼如下:

      function foo() {

      arguments.callee; // do something with this function object

      arguments.callee.caller; // and the calling function object

      }

      function bigLoop() {

      for(var i = 0; i < 100000; i++) {

      foo(); // Would normally be inlined...

      }

      }

      在上述代碼中,foo 函數不再是一個簡單的內聯擴展,因為它需要知道它自身以及它的調用者(caller)。這不僅抵消了內聯擴展所帶來的性能提升,同時也破壞了函數的封裝性,因為函數本身可能需要依賴于一個特定的調用背景。

      因此,建議大家盡量不要使用 arguments.callee。

      以上就是關于Javascript arguments 對象的全部內容了,小伙伴們是否了解透徹呢,簡單的說arguments指函數的參數對象(指實際傳入的參數)arguments.length指函數的參數對象的長度。 arguments[i]指第i個參數的值(第一個為0)

    【Javascript 函數的學習】相關文章:

    淺析jQuery 遍歷函數javascript08-06

    Javascript函數的定義和用法分析08-15

    JavaScript中push(),join() 函數實例詳解09-05

    最常用的20個javascript方法函數09-10

    JavaScript日期時間格式化函數08-29

    JavaScript學習筆記08-24

    JavaScript中常見的字符串操作函數及用法07-24

    有關javascript實現的多個層切換效果通用函數示例10-07

    JavaScript基于正則表達式數字判斷函數06-14

    關于數據類型的Javascript學習筆記08-05

    主站蜘蛛池模板: 久久精品国产只有精品66 | 亚州日韩精品专区久久久| 91精品国产综合久久久久久| 香港三级精品三级在线专区 | 日韩美女18网站久久精品| 成人午夜视频精品一区| 亚洲欧美日韩国产精品| 国产精品手机在线观看你懂的| 2022国内精品免费福利视频| 亚洲2022国产成人精品无码区| 国产在线精品国自产拍影院| 欧洲精品视频在线观看| 国产精品白丝AV网站| 亚洲日韩精品无码专区网址| 久热精品人妻视频| 国产成人精品一区在线 | 亚洲AV无码久久精品成人 | 久久精品夜色噜噜亚洲A∨| 欧美激情精品久久久久| 黑人巨大精品欧美| 亚洲av无码国产精品色午夜字幕 | 国产精品理论片在线观看| 国产精品久久久久影院色| 精品国产三级a∨在线| 婷婷五月深深久久精品 | 精品一卡2卡三卡4卡免费视频| 久久久无码精品亚洲日韩按摩 | 亚洲国产精品成人精品无码区 | 亚洲国产精品人人做人人爽| 国内精品免费久久影院| 国产精品一区二区三区99| 国产精品毛片无码| 国产成人精品免费视频大全| 国产精品 猎奇 另类视频| 999国产精品色在线播放| 亚洲午夜精品久久久久久人妖| 精品一区二区三区中文字幕| 国产成人精品综合网站| 国产成人精品无码播放| 精品国产精品国产偷麻豆 | 国产精品午夜免费观看网站|