我創建了一個簡單的模塊模式函數,它返回一個方法對象,在這種情況下,只有一個方法添加一個創建具有唯一ID的div,然後將其添加到特定的段元素。該id是由名爲cardId的函數中的私有變量創建的。我不理解變量是不是重置爲每個函數調用返回1,而是從函數返回的每個div都有一個唯一的ID,這意味着有一個變量關聯另一個變量名爲cardId。有人可以解釋一下這個問題,或者指出一件事情嗎?這個變量在每次函數調用時不會被重置到什麼程度?
let cardTools= function(){
let cardId=1;
return {
addCard: function(){
let card=document.createElement("div");
let sec=document.getElementsByClassName("memory-cards")[0];//gets a section
card.classList.add("card");
card.id="i";
card.id+=cardId;
cardId+=1;
sec.appendChild(card);
return card;
}
}
}
let tools= cardTools();
let card=tools.addCard(); //id==i1
let card2=tools.addCard(); //id==i2
let card3=tools.addCard(); //id==i3
所以你說這是工作,但你不明白? – Prisoner
好'cardId'在函數'addCard'之外。它被困在一個閉包中(由函數cardTools構成),但它並沒有在addCard中聲明,所以每次調用它時都不會被重新聲明。 –
簡單檢查。多少次你叫'cardTools'?一旦。所以,應該執行多少次'let cardId = 1' ... –