01/10/2018, 14:18
Closures trong javascript
Mọi người cho em hỏi tại sao thêm vào tham số lần thứ 2 nó lại thêm vào theLastName mà không phải thay đổi firstName nhỉ ?
function celebrityName (firstName) {
var nameIntro = "This celebrity is ";
function lastName (theLastName) {
return nameIntro + firstName + " " + theLastName;
}
return lastName;
}
var mjName = celebrityName ("Michael");
mjName ("Jackson");
Bài liên quan
Như thế nào mà gọi là “thêm vào tham số lần thứ 2” ?
thêm giá trị vào firstName lần 2(jackson) ý ạ
Cái “jackson” của bạn được truyền vào 1 function hoàn toàn khác, làm gì có chuyện thêm vào lần 2???
đây ạ, ý em là truyền vào
celebrityName
chuỗiMichael
rồi sau đó truyền tiếp chuỗiJackson
thì đáng nhẽ nó phải thay đổifirstName
nhưng nó lại đi vàotheLastName
ạ nên anh có thể giải thích cho em được không ạ?function celebrityName, hành vi của nó là tạo ra 1 function mới là lastName (1 lần gọi là 1 lần tạo mới), lastName mang 1 closure, closure đó chứa 2 variable là nameIntro và firstName.
Rồi celebrityName return lại lastName, function đó (mới tạo) được gán vào mjName;
Bạn gọi mjName tức là bạn đang gọi 1 instance của lastName. Vậy tức là bạn gọi 2 function khác nhau. Dĩ nhiên gọi mjName(“Jackson”) thì “Jackson” đi vào theLastName (tham số của function lastName).
Để ý rằng trong javascript, function cũng là 1 object, có thể được gán, tạo, gọi, truy cập member.