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
function
có dạngIFFY
sẽ 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.closure
có dạng return 1 function (console.log cái hàm ra là sẽ thấy nó log ra function) vì nóreturn function
nên muốn invoke thì phải dùng thêm()
như ở trong đoạn code thứ 2.