我在Mozilla的JavaScript教程中遇到了這個問題,我似乎無法理解它。我讀了很多stackoverflow的問題,但我找不到我的問題的答案。下面給出的是一段代碼片段。JavaScript中的匿名函數中的參數變量
var createPet = function(name) {
var sex;
return {
setName: function(newName) {
name = newName;
},
getName: function() {
return name;
},
getSex: function() {
return sex;
},
setSex: function(newSex) {
if(typeof newSex == "string" && (newSex.toLowerCase() == "male" || newSex.toLowerCase() == "female")) {
sex = newSex;
}
}
}
}
var pet = createPet("Vivie");
var pet2 = createPet("Sam");
pet.getName(); // Vivie
pet2.getName(); // Sam
createPet
似乎只返回地圖功能的對象,但沒有可變name
提及任何地方,但不知何故,pet
和pet2
的行爲很像一個名爲name
成員變量和一堆的成員函數的類的對象像getName()
,setName()
等。這是如何工作的?
'name'和'sex'是正常變量,不是任何對象的成員。認爲他們是一個對象的成員只會導致更多的混淆。對象屬性和變量之間存在巨大差異。 – Esailija