首頁 > web前端 > js教程 > 參數:JavaScript奇數

參數:JavaScript奇數

Joseph Gordon-Levitt
發布: 2025-03-08 00:23:12
原創
613 人瀏覽過

arguments: A JavaScript Oddity

參數:JavaScript奇數

鑰匙要點

  • 參數是每個JavaScript函數中可用的本地,類似數組的對象,其中包含調用函數時提供給該函數的所有參數。這不是一個真正的數組,因為它不具備諸如Push and Pop之類的標準數組方法。 儘管有局限性,但“參數”是一個強大的工具,允許創建接受可變數量參數的靈活函數,可以使用數組方法將其轉換為真實數組,Slice。
  • >參數還具有“ callee”屬性,其中包含對創建“參數”對象的函數的引用,從而使匿名函數能夠引用自身。這可以用來用預設參數創建自我引用函數和函數。
  • 參數是每個函數中可用的本地,類似數組的對象的名稱。這很古怪,經常被忽略,但是編程巫師的來源。所有主要的JavaScript庫都會利用參數對象的功能。這是每個JavaScript程序員都應該熟悉的東西。
  • > 在任何函數中,您都可以通過變量:參數訪問它,並且包含調用函數時提供給該函數的所有參數的數組。它實際上不是JavaScript數組; TypeOf參數將返回值:“對象”。您可以通過數組索引訪問單個參數值,並且它具有與其他數組一樣的長度屬性,但是它沒有Push and Pop之類的標準數組方法。
  • 創建靈活函數

即使看起來有限,也是一個非常有用的對象。例如,您可以製作接受可變數量參數的功能。格式函數,在迪恩·愛德華茲(Dean Edwards)的base2庫中找到,演示了此靈活性:>

>您提供一個模板字符串,其中您使用%1至%9添加了值的值,然後提供多達9個代表要插入字符串的其他參數。例如:

上面的代碼將返回字符串“和論文想知道您穿的襯衫”。 您可能注意到的一件事是,在格式的函數定義中,我們僅指定一個參數:字符串。 JavaScript允許我們將任意數量的參數傳遞給一個函數,無論函數定義如何,並且參數對像都可以訪問所有參數。

>將其轉換為真實數組

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
登入後複製
登入後複製
登入後複製
即使參數不是實際的JavaScript數組,我們也可以使用標準數組方法(如下)輕鬆地將其轉換為一個數組:

使用預設參數創建函數

參數對象允許我們執行各種JavaScript技巧。這是MakeFunc函數的定義。此功能使您可以為該功能提供功能參考和任何數量的參數。它將返回一個匿名函數,該函數調用您指定的函數,並在調用匿名函數時提供預設參數與提供的任何新參數一起提供:>

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
登入後複製
登入後複製
登入後複製
>提供給makeFunc的第一個參數被認為是您要調用的函數的引用(是的,在這個簡單的示例中沒有錯誤檢查),並且從參數數組中刪除。然後,makeFunc返回一個使用函數對象的應用方法來調用指定函數的匿名函數。 >

應用程序的第一個參數是指該函數將被調用;基本上,這將引用所調用函數的關鍵字。目前,這有點先進,所以我們將其保持無效。第二個參數是一個值數組,將轉換為該函數的參數對象。 makefunc將原始值的原始數組連接到提供給匿名函數的一系列參數上,並將其提供給所謂的函數。

>說,在模板始終相同的情況下,您需要輸出一條消息。為了使您避免每次調用格式函數時都必須引用模板,您可以使用MakeFunc Utility函數返回將為您調用格式並自動填寫模板參數的函數:>

>您可以像這樣重複調用Majortom函數:

format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
登入後複製

>每次調用Majortom函數時,都會使用第一個參數(已填寫的模板)調用格式函數。

var args = Array.prototype.slice.call(arguments);
登入後複製
創建自我引用函數

>您可能認為這很酷,但是等等,爭論還有一個驚喜。它具有另一個有用的屬性:Callee。 gragments.callee包含對創建參數對象的函數的引用。我們如何使用這樣的東西? gruments.callee是匿名函數可以引用自身的一種方便方式。
function makeFunc() {
  var args = Array.prototype.slice.call(arguments);
  var func = args.shift();
  return function() {
    return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
  };
}
登入後複製
>

但是,我想創建一個該功能的特殊版本,每次之間重複3次,延遲2秒。通過我的重複功能,我可以做到這一點:
var majorTom = makeFunc(format, "This is Major Tom to ground control. I'm %1.");
登入後複製
majorTom("stepping through the door");
majorTom("floating in a most peculiar way");
登入後複製
"This is Major Tom to ground control. I'm stepping through the door."
"This is Major Tom to ground control. I'm floating in a most peculiar way."
登入後複製
調用某物函數的結果是一個警報框重複3次,每個警報之間有2秒的延遲。
repeat is a function that takes a function reference, and 2 numbers. The first number is how many times to call the function and the second represents the delay, in milliseconds, between each call. Here's the definition for repeat:

登入後複製
function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
登入後複製
登入後複製
登入後複製

經常詢問有關JavaScript參數的問題

> JavaScript中的“參數”對像是什麼?它包含一個類似數組的結構,所有參數傳遞給了函數。當函數需要處理可變數量的參數時,此對像很有用。重要的是要注意,“參數”對像不是一個實際的數組,但是如果需要的話,它可以轉換為一個。但是,您可以使用array.from()方法或傳播操作員(…)將其轉換為數組。以下是一個示例:

函數convertargstoArray(){

var argsarray = array.from(grom(grom);

//或

//或

//或
var argsArray = [... gruments];
>}
}
}
}

> javaScript中的“ typeof”運算符是什麼?它返回一個指示未評估操作數的字符串。例如,“ typeof 3”將返回“ number”和“ hello”'將返回“字符串”。

我如何在javascript中使用“ typeof”與javaScript?

您可以使用“ typeof”操作員檢查傳遞給函數的每個參數的類型。以下是一個示例:

函數checkArgStype(){

>(var i = 0; i console.log(type of grag grag(type of grag>);

>>} } } } } } } }
第一個參數傳遞給函數。同樣,“參數[1]”是指第二個論點,依此類推。如果沒有傳遞參數,則“參數[0]”將是“未定義的”。

我可以在JavaScript中修改“參數”對象?但是,通常不建議這樣做,因為它可能導致令人困惑和難以刪除的代碼。在嚴格的模式下,任何修改“參數”對象的嘗試都會丟棄錯誤。
>
“參數”對象的長度屬性是什麼?“參數”對象的長度屬性返回傳遞給該函數的參數的數量。當您需要迭代論點或確定通過了多少參數時,這很有用。
>

>我可以在JavaScript中使用默認參數的“參數”對象?如果調用具有默認參數的函數的參數少於參數,則“參數”對象僅包含傳遞的實際參數,而不包含默認值。此屬性被棄用,不應在新代碼中使用。相反,您可以使用命名函數表達式或箭頭函數。

以上是參數:JavaScript奇數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板