亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這種抽象的重復是如何工作的?

這種抽象的重復是如何工作的?

喵喔喔 2021-11-12 17:40:49
我正在閱讀一些 Javascript 內容,因為我夢想成為一名優秀的 JS 開發人員。我有點知道如何使用基礎知識來滿足我的 PHP 需求,但仍有一些疑問。我看到了一些例子并得到了這個:function repeat(n, action) {   for (let i = 0; i < n; i++) {      action(i);   }}let labels = [];repeat(5, i => {   labels.push(`Unit ${i + 1}`);});console.log(labels);所以,如果需要,我可以用它來重復一些基本功能。理解,但在另一種情況下,我可以通過一些不同的方法使用相同的功能。如果我想傳遞一個函數,為什么變量i會變成計數器/迭代器?我以前一直使用它,但仍然不知道它是如何工作的,所以我不能在真正需要的時候使用它。
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

i不會成為迭代器。在代碼中,您使用 es6 速記符號來描述函數。i是函數的唯一參數。


i => {

   labels.push(`Unit ${i + 1}`);

});

是相同的


function(i){

  labels.push(`Unit ${i + 1}`);

請在此參考中查看有關速記符號的更多信息


編輯:要回答您的評論“添加了什么”,您必須repeat(n, action)更仔細地查看該功能。i在這兩種情況下都使用它也可能會讓您感到困惑,因此我將重寫該函數以幫助您理解。此函數使用 for 循環從 0 到n


for (let idx = 0; idx < n; idx++) {

   action(idx);

}

并使用當前的 for 循環索引調用操作idx。所以你的例子:


Iteration 0: action(0) -> labels.push(`Unit ${0 + 1}`);

Iteration 1: action(1) -> labels.push(`Unit ${1 + 1}`);

Iteration 2: action(2) -> labels.push(`Unit ${2 + 1}`);

Iteration 3: action(3) -> labels.push(`Unit ${3 + 1}`);

Iteration 4: action(4) -> labels.push(`Unit ${4 + 1}`);

請你注意,repeat的的聲明i是局部的它的功能體,就像i在i => { labels.push(單位$ {I + 1}); }是本地的函數體。這兩個i值沒有引用內存中的相同值,可以像我在解釋中所做的那樣重命名


查看完整回答
反對 回復 2021-11-12
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

將您i用作for循環中的變量以及箭頭函數的參數有點令人困惑。將函數參數更改為x并查看它仍然有效,可能會導致更好地理解變量范圍并使其更易于解釋:


repeat(5, x => {

   labels.push(`Unit ${x + 1}`);

});

您正在將箭頭函數傳遞給repeat()函數。在 repeat 函數內部,for循環i在每次迭代中增加,在本例中從 0 到 4,并且每次都調用您作為action參數傳遞的箭頭函數。此函數的x參數將采用 的值i,因為您在調用action引用(即箭頭函數)時將其作為第一個參數傳遞。


查看完整回答
反對 回復 2021-11-12
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

在repeat函數中,您將 forloop 索引傳遞給回調


function repeat(n, action) {

   for (let i = 0; i < n; i++) {

      action(i); // here you are passing index to callback

   }

}

并且您將索引作為參數


repeat(5, i => { // Here you will get params that is passed by repeat function

   labels.push(`Unit ${i + 1}`);

});

希望這會有所幫助


查看完整回答
反對 回復 2021-11-12
  • 3 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號