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");
明玉 viết 16:32 ngày 01/10/2018

thêm vào tham số lần thứ 2

Như thế nào mà gọi là “thêm vào tham số lần thứ 2” ?

Đức Thái viết 16:22 ngày 01/10/2018

thêm giá trị vào firstName lần 2(jackson) ý ạ

明玉 viết 16:20 ngày 01/10/2018

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???

Đức Thái viết 16:22 ngày 01/10/2018
function celebrityName (firstName) {
    var nameIntro = "This celebrity is ";
 
    function lastName (theLastName) {
        return nameIntro + firstName + " " + theLastName;
    }
    return lastName;
}
​
​var mjName = celebrityName ("Michael");​
mjName ("Jackson"); 

đây ạ, ý em là truyền vào celebrityName chuỗi Michael rồi sau đó truyền tiếp chuỗi Jackson thì đáng nhẽ nó phải thay đổi firstName nhưng nó lại đi vào theLastName ạ nên anh có thể giải thích cho em được không ạ?

明玉 viết 16:28 ngày 01/10/2018

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.

Bài liên quan
0