中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      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 快速創建一個解綁的外層方法。

        復制代碼 代碼如下:

        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 對象為它自身屬性和函數的形參都創建了 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 只在兩種情況下不會被創建,一是在函數內部被聲明為局部變量,二是當做函數的形參。其他情況,arguments 對象總是會被創建。

        由于 getter 和 setter 方法總是會隨著 arguments 對象的創建而創建,因此使用 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

      主站蜘蛛池模板: 人妖另类综合视频网站| 日韩精品极品在线观看视频| 日韩丝袜人妻中文字幕| 国产精品久久精品久久精品久久| 亚洲一区精品一区在线观看| 国产亚洲av天天在线观看| 清远市| 亚洲成a人片在线观看中文!!!| 蜜桃av一区二区高潮久久精品| 亚洲国产精品毛片av| 99久久综合狠狠综合久久一区 | 国产高潮自拍视频在线观看| 久久中文字幕久久久久91| 精品久久久久久电影院| 九月色婷婷免费| 性感人妻中文字幕在线| 在线观看国产精品自拍| 国产精品女主播在线观看 | 麻豆免费观看视频在线观看| 中文字幕av日韩精品一区| 精品人妻av一区二区三区不卡| 桐城市| 南和县| 99久久精品国产片| 精品午夜一区二区三区| 蛟河市| 久久黄色蜜桃av一区| 免费人成网上在线观看免费| 原平市| 中国免费一级毛片| 国产成人自拍视频在线免费 | 国产精品毛片av一区二区| 国产av一区二区3区| 欧美日韩一二三区高在线| 99熟妇人妻精品一区五一看片| 一区二区三区熟女人妻| 97精品国产高清自在线看超| 免费一级欧美大片久久网| 国产美女a做受大片免费| 神马不卡一区二区三级| 日本二区三区四区高清视频|