Asked Jun 24th, 2018 3:57 AM 532 0 3
  • 532 0 3
0

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

Share
  • 532 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 ANSWERS


Answered Jun 24th, 2018 10:21 AM
Accepted
+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 😄

Share
Anh Tran @thanh_tuan
Jun 25th, 2018 8:31 AM

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

0
| Reply
Share
Answered Jun 28th, 2018 11:08 AM
+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

Share
Answered Jun 24th, 2018 4:35 PM
+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ự.

Share
Anh Tran @thanh_tuan
Jun 25th, 2018 8:34 AM

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 {}.

+1
| Reply
Share