Yêu cầu thg 6 24, 2018 3:57 SA 740 0 3
  • 740 0 3
0

Tại sao Var và Let khác nhau trong trường hợp này

Chia sẻ
  • 740 0 3

Mình có thắc mắc thế này:

  • Var tạo ra vùng truy cập trong 1 Function - Scope khi được định nghĩa bên trong 1 function :
function name_function{
    var x ;
    // function scope
}
  • let tạo ra vùng truy cập trong 1 Block - Scope khi được định nghĩa bên trong 1 cặp { } - thường trong diều kiện :if() { } hoặc vòng lặp for () { } :
if (condition) {
     let x ;
     // block scope
}

Vậy chúng chỉ thực sự khác nhau khi được định nghĩa bên trong cặp { }.

Tuy nhiên trong trường hợp ví dụ này : http://jsfiddle.net/rmXcF/5/ chúng được khai báo bên ngoài cặp {} của vòng for mà sao chúng vẫn có sự khác nhau.

Bạn nào giải thích giúp mình với ạ ? Mình xin Cám ơn mọi người

3 CÂU TRẢ LỜI


Đã trả lời thg 6 24, 2018 10:21 SA
Đã được chấp nhận
+1

Vậy chúng chỉ thực sự khác nhau khi được định nghĩa bên trong cặp { }.

Chính xác là dùng {} có thể tạo ra một block, đối với các hàm if, while, switch, case ...

còn với vòng lặp (for, for-in, for-of) thì bạn cũng có thể tạo ra một biến với block scope thông qua việc khai báo bên trong ().

Với mỗi một iteration (lần lặp), sẽ có một lần binding được diễn ra, hay nói cách khác có một block scope được tạo ra, và phần initialization của vòng for được thực thi trong scope đó.

Bạn cứ coi đó là một công dụng đặc biệt của let khi dùng với vòng lặp đi 😄

Chia sẻ
Avatar Anh Tran @thanh_tuan
thg 6 25, 2018 8:31 SA

cám ơn bạn nhiều ạ

Đã trả lời thg 6 28, 2018 11:08 SA
+2

Bạn tham khảo câu hỏi này trên Viblo này: https://viblo.asia/q/nho-giai-thich-gia-tri-bien-i-trong-doan-code-W65GWL2j5DO

Chia sẻ
Đã trả lời thg 6 24, 2018 4:35 CH
+1

Trong trường hợp sử dụng var bạn có thể thử:

for(var i=1; i<6; i++) {
 (function() {
   var j = i;
        $("#div" + i).click(
          function () { alert(j); }
        );
      })();
}

Mình nghĩ let cũng cho tác dụng tương tự.

Chia sẻ
Avatar Anh Tran @thanh_tuan
thg 6 25, 2018 8:34 SA

Cám ơn bạn, mình cũng biết có 1 số cách để khắc phục được bài toán trên trong đó cũng có cách của bạn đưa ra. Cái mình thắc mắc lúc đó như nói ở trên là let và var khi chúng được khai báo không phải bên trong cặp {}.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí