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

viết 14:04 ngày 01/10/2018

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ạng IFFY 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.

Bài liên quan
0