激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

Javascript 函數的學(xué)習

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

Javascript 函數的學(xué)習

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

Javascript 函數的學(xué)習

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

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

  轉化為數組

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

  Array.prototype.slice.call(arguments);

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

  傳遞參數

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

  復制代碼 代碼如下:

  function foo() {

  bar.apply(null, arguments);

  }

  function bar(a, b, c) {

  // do stuff here

  }

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

  復制代碼 代碼如下:

  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 屬性的關(guān)系

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

  因此,修改函數的形參會(huì )影響對應的 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);

  性能問(wèn)題

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

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

  然而,有一種情形會(huì )嚴重影響 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 函數不再是一個(gè)簡(jiǎn)單的內聯(lián)擴展,因為它需要知道它自身以及它的調用者(caller)。這不僅抵消了內聯(lián)擴展所帶來(lái)的性能提升,同時(shí)也破壞了函數的封裝性,因為函數本身可能需要依賴(lài)于一個(gè)特定的調用背景。

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

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

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

淺析jQuery 遍歷函數javascript08-06

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

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

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

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

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

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

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

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

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

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频