01/10/2018, 11:51
Javascript Closure
var result = [];
for (var i = 0; i < 5; i++) {
result[i] = (function inner(x) {
// additional enclosing context
return function() {
console.log(x);
}
})(i);
}
result[1]();
////VS
var result = [];
for (var i = 0; i < 5; i++) {
result[i] = function inner(x) {
return function() {
document.write(x);
}
};
}
result[1]()();
Mọi người cho mình hỏi với ạ, mình có đọc về closure khá lâu rồi, theo được biết những free variable sẽ được “chụp” để dùng trong nested function, ở cách thứ nhất có dùng kèm self-invoking function, cách thứ 2 thì đơn giản chỉ là 1 closure không tự gọi, nhưng cách 1 thì có thể log ra x mong muốn, còn cách 2 thì không, mình xin hỏi ý kiến các bạn với ạ , cảm ơn trước ạ <3
Bài liên quan





Không khác nhau bạn ạ, một cái bạn cho nó chạy luôn trong vòng lặp, một cái chạy ngoài thôi
functioncó dạngIFFYsẽ chạy luôn không cần gọi (invoke/call) như bạn đã biết( functiion () )()chính là cách khai báo thứ nhất.closurecó dạng return 1 function (console.log cái hàm ra là sẽ thấy nó log ra function) vì nóreturn functionnên muốn invoke thì phải dùng thêm()như ở trong đoạn code thứ 2.