<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Javascript 函數(shù)的學(xué)習(xí)

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

    Javascript 函數(shù)的學(xué)習(xí)

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

    Javascript 函數(shù)的學(xué)習(xí)

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

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

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

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

      Array.prototype.slice.call(arguments);

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

      傳遞參數(shù)

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

      復(fù)制代碼 代碼如下:

      function foo() {

      bar.apply(null, arguments);

      }

      function bar(a, b, c) {

      // do stuff here

      }

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

      復(fù)制代碼 代碼如下:

      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 對(duì)象為它自身屬性和函數(shù)的形參都創(chuàng)建了 getter 和 setter 方法。

      因此,修改函數(shù)的形參會(huì)影響對(duì)應(yīng)的 arguments 對(duì)象的屬性值,反之亦然。

      復(fù)制代碼 代碼如下:

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

      性能問(wèn)題

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

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

      然而,有一種情形會(huì)嚴(yán)重影響 Javascript 的性能,那就是使用 arguments.callee。

      復(fù)制代碼 代碼如下:

      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ù)不再是一個(gè)簡(jiǎn)單的內(nèi)聯(lián)擴(kuò)展,因?yàn)樗枰浪陨硪约八恼{(diào)用者(caller)。這不僅抵消了內(nèi)聯(lián)擴(kuò)展所帶來(lái)的性能提升,同時(shí)也破壞了函數(shù)的封裝性,因?yàn)楹瘮?shù)本身可能需要依賴(lài)于一個(gè)特定的調(diào)用背景。

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

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

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

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

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

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

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

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

    JavaScript學(xué)習(xí)筆記08-24

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

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

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

    關(guān)于數(shù)據(jù)類(lèi)型的Javascript學(xué)習(xí)筆記08-05

    主站蜘蛛池模板: 国产精品视频全国免费观看| 蜜臀久久99精品久久久久久| 国产精品成人小电影在线观看| 午夜成人精品福利网站在线观看 | 人妻少妇偷人精品无码| 惠民福利中文字幕人妻无码乱精品 | 精品卡一卡二卡乱码高清| 无码国模国产在线无码精品国产自在久国产 | 亚洲精品无码99在线观看| 国产三级精品三级在线观看| 国产精品久久久久无码av| 精品午夜福利在线观看| 一本色道久久88—综合亚洲精品| 精品久久久久久国产三级| 99久久国产主播综合精品| 99久久精品国产麻豆| 国产精品无套内射迪丽热巴| 久久亚洲美女精品国产精品| 一本色道久久88精品综合| 亚洲精品99久久久久中文字幕| 久久精品成人| 久久精品国产欧美日韩| 国产偷伦精品视频| 99亚洲精品视频| 伊人久久精品线影院| 亚洲国产精品欧美日韩一区二区| 国产伦精品一区二区三区女| 国产短视频精品一区二区三区| 国产精品免费观看调教网| 精品久久久久久无码专区| 精品国精品国产自在久国产应用| 久久精品水蜜桃av综合天堂| 精品欧洲AV无码一区二区男男| 国产精品免费看久久久| 国产成人无码精品一区二区三区 | 91国内揄拍国内精品情侣对白 | 欧美精品videosse精子| 久久精品天天中文字幕人妻| 国产麻豆精品久久一二三| 国产精品无码A∨精品影院| 国产成人精品日本亚洲网站|