• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. Javascript 函數(shù)的學習

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

        Javascript 函數(shù)的學習

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

        Javascript 函數(shù)的學習

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

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

          轉(zhuǎn)化為數(shù)組

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

          Array.prototype.slice.call(arguments);

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

          傳遞參數(shù)

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

          復制代碼 代碼如下:

          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);

          };

          函數(shù)形參和 arguments 屬性的關(guān)系

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

          因此,修改函數(shù)的形參會影響對應的 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)建,一是在函數(shù)內(nèi)部被聲明為局部變量,二是當做函數(shù)的形參。其他情況,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 函數(shù)不再是一個簡單的內(nèi)聯(lián)擴展,因為它需要知道它自身以及它的調(diào)用者(caller)。這不僅抵消了內(nèi)聯(lián)擴展所帶來的性能提升,同時也破壞了函數(shù)的封裝性,因為函數(shù)本身可能需要依賴于一個特定的調(diào)用背景。

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

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

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【Javascript 函數(shù)的學習】相關(guān)文章:

        淺析jQuery 遍歷函數(shù)javascript08-06

        Javascript函數(shù)的定義和用法分析08-15

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

        最常用的20個javascript方法函數(shù)09-10

        JavaScript日期時間格式化函數(shù)08-29

        JavaScript學習筆記08-24

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

        有關(guān)javascript實現(xiàn)的多個層切換效果通用函數(shù)示例10-07

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

        關(guān)于數(shù)據(jù)類型的Javascript學習筆記08-05

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 日本三级网站69 | 亚洲国产精品中文乱码AV | 日韩动漫一区在线观看 | 亚洲国产无在线观看 | 亚洲欧美日韩一区天堂 | 亚洲视频在线高清观看你懂得 |

            Javascript 函數(shù)的學習

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

            Javascript 函數(shù)的學習

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

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

              轉(zhuǎn)化為數(shù)組

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

              Array.prototype.slice.call(arguments);

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

              傳遞參數(shù)

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

              復制代碼 代碼如下:

              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);

              };

              函數(shù)形參和 arguments 屬性的關(guān)系

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

              因此,修改函數(shù)的形參會影響對應的 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)建,一是在函數(shù)內(nèi)部被聲明為局部變量,二是當做函數(shù)的形參。其他情況,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 函數(shù)不再是一個簡單的內(nèi)聯(lián)擴展,因為它需要知道它自身以及它的調(diào)用者(caller)。這不僅抵消了內(nèi)聯(lián)擴展所帶來的性能提升,同時也破壞了函數(shù)的封裝性,因為函數(shù)本身可能需要依賴于一個特定的調(diào)用背景。

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

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