Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Quy tắc phạm vi

Sự khác biệt chính là các quy tắc phạm vi. Các biến được khai báo bởi từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 được phân chia đến cơ thể hàm ngay lập tức (do đó phạm vi hàm) trong khi các biến
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 được phân phối đến khối kèm theo ngay lập tức được ký hiệu bởi
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
9 (do đó phạm vi khối).

Show

function run() {
  var foo = "Foo";
  let bar = "Bar";

  console.log(foo, bar); // Foo Bar

  {
    var moo = "Mooo"
    let baz = "Bazz";
    console.log(moo, baz); // Mooo Bazz
  }

  console.log(moo); // Mooo
  console.log(baz); // ReferenceError
}

run();

Lý do tại sao từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 được giới thiệu vào ngôn ngữ là phạm vi chức năng là khó hiểu và là một trong những nguồn chính của lỗi trong JavaScript.

Hãy xem ví dụ này từ một câu hỏi tràn chồng khác:

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
1 đã được đầu ra để điều khiển mỗi lần
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
2 được gọi vì các chức năng ẩn danh bị ràng buộc với cùng một biến.

Mọi người đã phải tạo ra các chức năng ngay lập tức để nắm bắt các giá trị chính xác từ các vòng lặp nhưng đó cũng là lông.

Kéo

Mặc dù các biến được khai báo với từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 được nâng (khởi tạo bằng
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
4 trước khi mã được chạy) có nghĩa là chúng có thể truy cập được trong phạm vi kèm theo của chúng ngay cả trước khi chúng được khai báo:

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 Các biến không được khởi tạo cho đến khi định nghĩa của chúng được đánh giá. Truy cập chúng trước khi khởi tạo kết quả trong
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
6. Biến được cho là ở "vùng chết tạm thời" từ đầu khối cho đến khi khởi tạo được xử lý.

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();

Tạo thuộc tính đối tượng toàn cầu

Ở cấp cao nhất,

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8, không giống như
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7, không tạo một thuộc tính trên đối tượng toàn cầu:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined

Redclaration

Trong chế độ nghiêm ngặt,

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 sẽ cho phép bạn ghi lại cùng một biến trong cùng một phạm vi trong khi
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 tăng cú pháp.

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared

15

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 cũng có thể được sử dụng để tránh các vấn đề với việc đóng cửa. Nó liên kết giá trị mới thay vì giữ một tài liệu tham khảo cũ như trong các ví dụ dưới đây.

for(var i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>

Mã ở trên cho thấy một vấn đề đóng cửa JavaScript cổ điển. Tham chiếu đến biến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 đang được lưu trữ trong việc đóng xử lý nhấp chuột, thay vì giá trị thực của
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02.

Mỗi trình xử lý nhấp chuột sẽ đề cập đến cùng một đối tượng bởi vì chỉ có một đối tượng bộ đếm chứa 6 để bạn nhận được sáu trên mỗi lần nhấp.

Một cách giải quyết chung là kết thúc điều này trong một chức năng ẩn danh và vượt qua

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 như một đối số. Các vấn đề như vậy cũng có thể tránh được ngay bây giờ bằng cách sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 thay vào đó
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 như trong mã bên dưới.

(Được thử nghiệm trong Chrome và Firefox 50)

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 27 tháng 5 năm 2015 lúc 10:16May 27, 2015 at 10:16

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Gurpreet Singhgurpreet SinghGurpreet Singh

20,5K5 Huy hiệu vàng43 Huy hiệu bạc57 Huy hiệu đồng5 gold badges43 silver badges57 bronze badges

13

Sự khác biệt giữa for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }8 và for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }7 là gì?

  • Một biến được xác định bằng cách sử dụng câu lệnh
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    7 được biết đến trong toàn bộ hàm mà nó được xác định trong, từ đầu hàm. (*)the function it is defined in, from the start of the function. (*)
  • Một biến được xác định bằng cách sử dụng câu lệnh
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 chỉ được biết đến trong khối nó được xác định trong thời điểm nó được xác định trở đi. (**)the block it is defined in, from the moment it is defined onward. (**)

Để hiểu sự khác biệt, hãy xem xét mã sau:

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
0

Ở đây, chúng ta có thể thấy rằng biến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
11 của chúng ta chỉ được biết đến trong lần đầu tiên cho vòng lặp, nhưng không phải trước và sau. Tuy nhiên, biến
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 của chúng tôi được biết đến trong toàn bộ chức năng.

Ngoài ra, hãy xem xét rằng các biến phạm vi khối không được biết trước khi chúng được khai báo vì chúng không được nâng lên. Bạn cũng không được phép tái lập cùng một biến phạm vi khối trong cùng một khối. Điều này làm cho các biến phạm vi khối ít dễ bị lỗi so với các biến phạm vi toàn cầu hoặc chức năng, được nâng lên và không tạo ra bất kỳ lỗi nào trong trường hợp nhiều khai báo.


Có an toàn khi sử dụng for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }8 ngày nay không?

Một số người sẽ lập luận rằng trong tương lai, chúng ta sẽ chỉ sử dụng các câu lệnh LET và các câu lệnh VAR sẽ trở nên lỗi thời. Đạo sư JavaScript Kyle Simpson đã viết một bài báo rất công phu về lý do tại sao ông tin rằng điều đó sẽ không xảy ra.Kyle Simpson wrote a very elaborate article on why he believes that won't be the case.

Hôm nay, tuy nhiên, đó chắc chắn không phải là trường hợp. Trên thực tế, chúng ta thực sự cần phải tự hỏi liệu có an toàn khi sử dụng tuyên bố

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 không. Câu trả lời cho câu hỏi đó phụ thuộc vào môi trường của bạn:

  • Nếu bạn đang viết mã JavaScript phía máy chủ (Node.js), bạn có thể sử dụng câu lệnh

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 một cách an toàn.Node.js), you can safely use the
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 statement.

  • Nếu bạn đang viết mã JavaScript phía máy khách và sử dụng bộ chuyển đổi dựa trên trình duyệt (như Traceur hoặc Babel-Standalone), bạn có thể sử dụng một cách an toàn câu lệnh ____88, tuy nhiên mã của bạn có thể là bất cứ điều gì nhưng tối ưu đối với hiệu suất.Traceur or babel-standalone), you can safely use the

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 statement, however your code is likely to be anything but optimal with respect to performance.

  • Nếu bạn đang viết mã JavaScript phía máy khách và sử dụng bộ chuyển đổi dựa trên nút (như Script Shell Traceur hoặc Babel), bạn có thể sử dụng câu lệnh

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 một cách an toàn. Và bởi vì trình duyệt của bạn sẽ chỉ biết về mã được truyền, nên hạn chế hiệu suất.traceur shell script or Babel), you can safely use the
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 statement. And because your browser will only know about the transpiled code, performance drawbacks should be limited.

  • Nếu bạn đang viết mã JavaScript phía máy khách và không sử dụng Transpiler, bạn cần xem xét hỗ trợ trình duyệt.

    Vẫn còn một số trình duyệt hoàn toàn không hỗ trợ

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8:

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?


Cách theo dõi hỗ trợ trình duyệt

Để biết tổng quan cập nhật về trình duyệt nào hỗ trợ câu lệnh

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 tại thời điểm bạn đọc câu trả lời này, hãy xem trang
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
20 này.this
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
20 page
.


(*) Các biến phạm vi toàn cầu và chức năng có thể được khởi tạo và sử dụng trước khi chúng được khai báo vì các biến JavaScript được nâng. Điều này có nghĩa là các tuyên bố luôn luôn là nhiều trên đỉnh của phạm vi.hoisted. This means that declarations are always much to the top of the scope.

(**) Các biến phạm vi khối không được nâng lên

Đã trả lời ngày 23 tháng 2 năm 2016 lúc 18:35Feb 23, 2016 at 18:35

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

John Slegersjohn SlegersJohn Slegers

43K22 Huy hiệu vàng194 Huy hiệu bạc163 Huy hiệu đồng22 gold badges194 silver badges163 bronze badges

6

Đây là một lời giải thích về từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 với một số ví dụ.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 hoạt động rất giống
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7. Sự khác biệt chính là phạm vi của biến
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 là toàn bộ hàm bao quanh

Bảng này trên Wikipedia cho thấy trình duyệt nào hỗ trợ JavaScript 1.7.

Lưu ý rằng chỉ các trình duyệt Mozilla và Chrome hỗ trợ nó. Tức là, safari và những người khác không có.

Đã trả lời ngày 17 tháng 4 năm 2009 lúc 20:11Apr 17, 2009 at 20:11

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Ben Sben sBen S

67.7K30 Huy hiệu vàng170 Huy hiệu bạc212 Huy hiệu Đồng30 gold badges170 silver badges212 bronze badges

5

for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }8

Phạm vi khối

Các biến được khai báo bằng cách sử dụng từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 được phân tán khối, điều đó có nghĩa là chúng chỉ có sẵn trong khối mà chúng được khai báo.

Ở cấp cao nhất (ngoài một hàm)

Ở cấp cao nhất, các biến được khai báo bằng cách sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 không tạo các thuộc tính trên đối tượng toàn cầu.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
1

Bên trong một chức năng

Bên trong một hàm (nhưng bên ngoài một khối),

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 có phạm vi giống như
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
2

Bên trong một khối

Các biến được khai báo bằng cách sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 bên trong một khối không thể được truy cập bên ngoài khối đó.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
3

Bên trong một vòng lặp

Các biến được khai báo với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 trong các vòng lặp chỉ có thể được tham chiếu bên trong vòng lặp đó.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
4

Vòng lặp với đóng cửa

Nếu bạn sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 thay vì
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 trong một vòng lặp, với mỗi lần lặp, bạn sẽ nhận được một biến mới. Điều đó có nghĩa là bạn có thể sử dụng một cách an toàn trong một vòng lặp.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
5

Khu vực chết tạm thời

Do vùng chết tạm thời, các biến được khai báo bằng cách sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 không thể được truy cập trước khi chúng được khai báo. Cố gắng làm như vậy ném một lỗi.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
6

Không khai báo lại

Bạn không thể khai báo cùng một biến nhiều lần bằng cách sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8. Bạn cũng không thể khai báo một biến bằng cách sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 với cùng một định danh với một biến khác được khai báo bằng cách sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
7

var funcs = []; // let's create 3 functions for (var i = 0; i < 3; i++) { // and store them in funcs funcs[i] = function() { // each should log its value. console.log("My value: " + i); }; } for (var j = 0; j < 3; j++) { // and now let's run each one to see funcs[j](); }38

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 khá giống với ________ 88, nó có khối và có TDZ. Tuy nhiên, có hai điều khác nhau.

Không được chỉ định lại

Biến được khai báo bằng cách sử dụng

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 không thể được gán lại.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
8

Lưu ý rằng điều đó không có nghĩa là giá trị là bất biến. Tính chất của nó vẫn có thể được thay đổi.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
9

Nếu bạn muốn có một đối tượng bất biến, bạn nên sử dụng

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
42.

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
0

Khởi tạo là bắt buộc

Bạn luôn phải chỉ định một giá trị khi khai báo một biến bằng cách sử dụng

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38.

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
1

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Abdul Rehman

1.5783 huy hiệu vàng23 Huy hiệu bạc35 Huy hiệu đồng3 gold badges23 silver badges35 bronze badges

Đã trả lời ngày 23 tháng 11 năm 2016 lúc 22:52Nov 23, 2016 at 22:52

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

0

Câu trả lời được chấp nhận bị thiếu một điểm:

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
2

William

4039 Huy hiệu bạc21 Huy hiệu Đồng9 silver badges21 bronze badges

Đã trả lời ngày 2 tháng 6 năm 2015 lúc 20:59Jun 2, 2015 at 20:59

Lcf.vsLcf.vsLcf.vs

1.7521 huy hiệu vàng11 Huy hiệu bạc15 Huy hiệu đồng1 gold badge11 silver badges15 bronze badges

4

Trong hầu hết các thuật ngữ cơ bản,

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
3
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
4

Hộp cát để chơi xung quanh ↓

Đã trả lời ngày 11 tháng 5 năm 2020 lúc 17:04May 11, 2020 at 17:04

Hasan Sefa Ozalphasan Sefa OzalpHasan Sefa Ozalp

5.2243 huy hiệu vàng31 Huy hiệu bạc40 Huy hiệu đồng3 gold badges31 silver badges40 bronze badges

0

Sự khác biệt chính là sự khác biệt về phạm vi, trong khi cho phép chỉ có thể có sẵn bên trong phạm vi mà nó được khai báo, giống như trong vòng lặp, ví dụ VAR có thể được truy cập bên ngoài vòng lặp. Từ tài liệu trong MDN (ví dụ cũng từ MDN):scope difference, while let can be only available inside the scope it's declared, like in for loop, var can be accessed outside the loop for example. From the documentation in MDN (examples also from MDN):

Cho phép bạn khai báo các biến bị giới hạn trong phạm vi cho khối, câu lệnh hoặc biểu thức mà nó được sử dụng. Điều này không giống như từ khóa VAR, xác định một biến trên toàn cầu hoặc cục bộ với toàn bộ hàm bất kể phạm vi khối. allows you to declare variables that are limited in scope to the block, statement, or expression on which it is used. This is unlike the var keyword, which defines a variable globally, or locally to an entire function regardless of block scope.

Các biến được khai báo bằng phạm vi của chúng là khối mà chúng được xác định, cũng như trong bất kỳ khối nào có chứa. Theo cách này, hãy để hoạt động rất giống Var. Sự khác biệt chính là phạm vi của biến VAR là toàn bộ hàm kèm theo:let have as their scope the block in which they are defined, as well as in any contained sub-blocks. In this way, let works very much like var. The main difference is that the scope of a var variable is the entire enclosing function:

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
5

Ở cấp cao nhất của các chương trình và chức năng, cho phép, không giống như VAR, không tạo ra một thuộc tính trên đối tượng toàn cầu. Ví dụ:let, unlike var, does not create a property on the global object. For example:

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
6

Khi được sử dụng bên trong một khối, hãy để giới hạn phạm vi của biến trong khối đó. Lưu ý sự khác biệt giữa VAR có phạm vi bên trong hàm nơi nó được khai báo.var whose scope is inside the function where it is declared.

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
7

Cũng đừng quên tính năng ECMA6, vì vậy nó chưa được hỗ trợ đầy đủ, vì vậy tốt hơn là luôn luôn chuyển nó sang ECMA5 bằng cách sử dụng Babel, v.v. để biết thêm về hãy truy cập trang web của Babel

Đã trả lời ngày 22 tháng 3 năm 2017 lúc 14:39Mar 22, 2017 at 14:39

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

AlirezaalirezaAlireza

96.2K26 Huy hiệu vàng265 Huy hiệu bạc167 Huy hiệu đồng26 gold badges265 silver badges167 bronze badges

1

Dưới đây là một ví dụ cho sự khác biệt giữa hai (hỗ trợ mới bắt đầu cho Chrome):

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Như bạn có thể thấy biến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
44 vẫn có giá trị bên ngoài phạm vi vòng lặp (phạm vi khối), nhưng biến
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
45 không được xác định bên ngoài phạm vi vòng lặp.

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
8

Đã trả lời ngày 6 tháng 3 năm 2015 lúc 10:41Mar 6, 2015 at 10:41

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

vlio20vlio20vlio20

8.50617 Huy hiệu vàng93 Huy hiệu bạc175 Huy hiệu Đồng17 gold badges93 silver badges175 bronze badges

0

Có một số khác biệt tinh tế - phạm vi

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 hoạt động giống như phạm vi biến đổi trong ít nhiều ngôn ngữ khác.

ví dụ. Nó phạm vi đến khối kèm theo, chúng không tồn tại trước khi chúng được khai báo, v.v.

Tuy nhiên, điều đáng chú ý là

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 chỉ là một phần của việc triển khai JavaScript mới hơn và có mức độ hỗ trợ trình duyệt khác nhau.

Đã trả lời ngày 17 tháng 4 năm 2009 lúc 21:38Apr 17, 2009 at 21:38

Olliejolliejolliej

34,8K9 Huy hiệu vàng57 Huy hiệu bạc55 Huy hiệu Đồng9 gold badges57 silver badges55 bronze badges

5

  • Biến không nâng

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 sẽ không nâng lên toàn bộ phạm vi của khối mà chúng xuất hiện. Ngược lại,
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    7 có thể kéo như dưới đây.not hoist to the entire scope of the block they appear in. By contrast,
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    7 could hoist as below.

    function run() {
      console.log(foo); // undefined
      var foo = "Foo";
      console.log(foo); // Foo
    }
    
    run();
    9

    Trên thực tế, mỗi @bergi, cả

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    7 và
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 đều được nâng lên.

  • Thu gom rác thải

    Phạm vi khối của

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 là hữu ích liên quan đến việc đóng cửa và thu gom rác để lấy lại bộ nhớ. Xem xét,

    function checkHoisting() {
      console.log(foo); // ReferenceError
      let foo = "Foo";
      console.log(foo); // Foo
    }
    
    checkHoisting();
    0

    Cuộc gọi lại xử lý

    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    53 hoàn toàn không cần biến
    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    54. Về mặt lý thuyết, sau khi
    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    55 chạy, cấu trúc dữ liệu khổng lồ
    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    54 có thể được thu thập rác. Tuy nhiên, có thể một số động cơ JS vẫn sẽ phải giữ cấu trúc khổng lồ này, vì hàm
    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    53 có đóng cửa trong toàn bộ phạm vi.

    Tuy nhiên, phạm vi khối có thể làm cho cấu trúc dữ liệu khổng lồ này được thu thập.

    function checkHoisting() {
      console.log(foo); // ReferenceError
      let foo = "Foo";
      console.log(foo); // Foo
    }
    
    checkHoisting();
    1
  • for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 vòng lặp

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 Trong vòng lặp có thể gắn lại nó với từng lần lặp của vòng lặp, đảm bảo gán lại giá trị từ cuối vòng lặp vòng trước. Xem xét,re-binds it to each iteration of the loop, making sure to re-assign it the value from the end of the previous loop iteration. Consider,

    function checkHoisting() {
      console.log(foo); // ReferenceError
      let foo = "Foo";
      console.log(foo); // Foo
    }
    
    checkHoisting();
    2

    Tuy nhiên, thay thế

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    7 bằng
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8

    function checkHoisting() {
      console.log(foo); // ReferenceError
      let foo = "Foo";
      console.log(foo); // Foo
    }
    
    checkHoisting();
    3

    Bởi vì

    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 tạo ra một môi trường từ vựng mới với các tên đó cho a) biểu thức khởi đầu b) mỗi lần lặp (trước đây để đánh giá biểu thức tăng), nên nhiều chi tiết hơn ở đây.

Đã trả lời ngày 17 tháng 1 năm 2016 lúc 15:11Jan 17, 2016 at 15:11

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Zangwzangwzangw

39,8K18 Huy hiệu vàng154 Huy hiệu bạc187 Huy hiệu đồng18 gold badges154 silver badges187 bronze badges

4

Sự khác biệt là trong phạm vi của các biến được khai báo với mỗi biến.

Trong thực tế, có một số hậu quả hữu ích của sự khác biệt về phạm vi:

  1. for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 Các biến chỉ hiển thị trong khối bao quanh gần nhất của chúng (
    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    64).
  2. for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 Các biến chỉ có thể sử dụng trong các dòng mã xảy ra sau khi biến được khai báo (mặc dù chúng được nâng lên!).
  3. for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 Các biến có thể không được xác định lại bởi một
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    7 hoặc
    for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 sau đó.
  4. Các biến toàn cầu ____88 không được thêm vào đối tượng toàn cầu
    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }
    70.
  5. for(let i=1; i<6; i++) {
      $("#div" + i).click(function () { console.log(i); });
    }
    8 Biến rất dễ sử dụng với việc đóng cửa (chúng không gây ra điều kiện chủng tộc).

Các hạn chế được áp đặt bởi

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 làm giảm khả năng hiển thị của các biến và tăng khả năng va chạm tên bất ngờ sẽ được tìm thấy sớm. Điều này giúp dễ dàng theo dõi và lý do về các biến, bao gồm cả khả năng tiếp cận của chúng (giúp đòi lại bộ nhớ không sử dụng).

Do đó, các biến

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 ít có khả năng gây ra các vấn đề khi được sử dụng trong các chương trình lớn hoặc khi các khung được phát triển độc lập được kết hợp theo những cách mới và bất ngờ.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 vẫn có thể hữu ích nếu bạn chắc chắn rằng bạn muốn hiệu ứng liên kết đơn khi sử dụng đóng trong vòng lặp (#5) hoặc để khai báo các biến toàn cầu có thể nhìn nhận bên ngoài trong mã của bạn (#4). Việc sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 cho xuất khẩu có thể được thay thế nếu
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
76 di chuyển ra khỏi không gian chuyển đổi và vào ngôn ngữ cốt lõi.

Ví dụ

1. Không sử dụng Khối kèm theo gần nhất: Khối mã này sẽ ném lỗi tham chiếu vì việc sử dụng

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
77 thứ hai xảy ra bên ngoài khối nơi nó được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8:
This block of code will throw a reference error because the second use of
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
77 occurs outside of the block where it is declared with
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8:

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
4

Ngược lại, ví dụ tương tự với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 hoạt động.

2. Không sử dụng trước khi khai báo: Khối mã này sẽ ném

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
6 trước khi mã có thể được chạy vì
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
77 được sử dụng trước khi được khai báo:

This block of code will throw a
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
6 before the code can be run because
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
77 is used before it is declared:

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
5

Ngược lại, ví dụ tương tự với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 phân tích cú pháp và chạy mà không ném bất kỳ trường hợp ngoại lệ nào.

3. Không có sự điều chỉnh lại: Mã sau chứng minh rằng một biến được khai báo với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 có thể không được xác định lại sau: The following code demonstrates that a variable declared with
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 may not be redeclared later:

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
6

4. Globals không được gắn vào

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
70:

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
7

5. Dễ dàng sử dụng với đóng cửa: Các biến được khai báo với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 không hoạt động tốt với các vòng lặp đóng bên trong. Dưới đây là một vòng lặp đơn giản xuất ra chuỗi các giá trị mà biến
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 có ở các thời điểm khác nhau:
Variables declared with
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 do not work well with closures inside loops. Here is a simple loop that outputs the sequence of values that the variable
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 has at different points in time:

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
8

Cụ thể, đầu ra này:

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
9

Trong JavaScript, chúng ta thường sử dụng các biến vào thời điểm sau đáng kể so với khi chúng được tạo. Khi chúng tôi chứng minh điều này bằng cách trì hoãn đầu ra với việc đóng được chuyển đến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
87:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
0

... Đầu ra vẫn không thay đổi miễn là chúng tôi gắn bó với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8. Ngược lại, nếu chúng ta đã sử dụng
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
89 thay thế:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
1

... Vòng lặp bất ngờ xuất ra "I là 5" năm lần:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
2

Đã trả lời ngày 22 tháng 5 năm 2017 lúc 1:09May 22, 2017 at 1:09

Mormegilmormegilmormegil

1.7521 Huy hiệu vàng19 Huy hiệu bạc22 Huy hiệu đồng1 gold badge19 silver badges22 bronze badges

2

Đây là một ví dụ để thêm vào những gì người khác đã viết. Giả sử bạn muốn tạo một mảng các hàm,

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
90, trong đó mỗi hàm lấy một đối số số duy nhất và trả về tổng của đối số và chỉ mục của hàm trong mảng. Cố gắng tạo
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
90 với một vòng lặp bằng cách sử dụng từ khóa
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 sẽ không hoạt động theo cách mà ai đó có thể mong đợi một cách ngây thơ:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
3

Quá trình ở trên không tạo ra mảng các hàm mong muốn vì phạm vi của ____ 102 mở rộng ra ngoài việc lặp lại của khối

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
94 trong đó mỗi hàm được tạo. Thay vào đó, ở cuối vòng lặp,
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 trong mỗi lần đóng của hàm đề cập đến giá trị của ____ 102 ở cuối vòng lặp (1000) cho mỗi hàm ẩn danh trong
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
90. Đây không phải là những gì chúng tôi muốn ở tất cả: Bây giờ chúng tôi có một mảng gồm 1000 chức năng khác nhau trong bộ nhớ có cùng một hành vi. Và nếu sau đó chúng tôi cập nhật giá trị của
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02, đột biến sẽ ảnh hưởng đến tất cả
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
90.

Tuy nhiên, chúng tôi có thể thử lại bằng cách sử dụng từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
4

Lần này,

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 được bật lại trên mỗi lần lặp của vòng lặp
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
94. Mỗi hàm hiện giữ giá trị của
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 tại thời điểm tạo chức năng và
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
90 hoạt động như mong đợi.

Bây giờ, hình ảnh trộn hai hành vi và có lẽ bạn sẽ thấy lý do tại sao không nên trộn

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 và
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 mới hơn với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 cũ hơn trong cùng một kịch bản. Làm như vậy có thể kết quả là một số mã khó hiểu ngoạn mục.

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
5

Đừng để điều này xảy ra với bạn. Sử dụng một linter.

Lưu ý: Đây là một ví dụ giảng dạy nhằm chứng minh hành vi ____ 87/________ 88 trong các vòng lặp và với các đóng cửa chức năng cũng sẽ dễ hiểu. Đây sẽ là một cách khủng khiếp để thêm số. Nhưng kỹ thuật chung nắm bắt dữ liệu trong việc đóng chức năng ẩn danh có thể gặp phải trong thế giới thực trong các bối cảnh khác. Ymmv. This is a teaching example intended to demonstrate the

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7/
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 behavior in loops and with function closures that would also be easy to understand. This would be a terrible way to add numbers. But the general technique of capturing data in anonymous function closures might be encountered in the real world in other contexts. YMMV.

Đã trả lời ngày 18 tháng 8 năm 2014 lúc 0:58Aug 18, 2014 at 0:58

Abrozabrozabroz

3613 Huy hiệu bạc7 Huy hiệu đồng3 silver badges7 bronze badges

3

Có thể hai chức năng sau đây cho thấy sự khác biệt:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
6

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 17 tháng 12 năm 2015 lúc 3:22Dec 17, 2015 at 3:22

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Abdennour toumiabdennour toumiAbdennour TOUMI

80,5K36 Huy hiệu vàng233 Huy hiệu bạc243 Huy hiệu Đồng36 gold badges233 silver badges243 bronze badges

0

ES6 đã giới thiệu hai từ khóa mới (LET và const) thay thế cho Var.let and const) alternate to var.

Khi bạn cần giảm tốc độ khối, bạn có thể đi với LET và const thay vì var.

Bảng dưới đây tóm tắt sự khác biệt giữa VAR, LET và const

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Tylerh

21.3K59 Huy hiệu vàng74 Huy hiệu bạc93 Huy hiệu Đồng59 gold badges74 silver badges93 bronze badges

Đã trả lời ngày 26 tháng 1 năm 2020 lúc 11:39Jan 26, 2020 at 11:39

SrikrushnasrikrushnaSrikrushna

3,8251 Huy hiệu vàng36 Huy hiệu bạc45 Huy hiệu đồng1 gold badge36 silver badges45 bronze badges

1

Hàm vs Phạm vi khối:

Sự khác biệt chính giữa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 và
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 là các biến được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 là phạm vi chức năng. Trong khi các chức năng được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 là phạm vi khối. Ví dụ:function scoped. Whereas functions declared with
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 are block scoped. For example:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
7

Các biến có

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7:

Khi hàm đầu tiên

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
15 được gọi là foo biến, được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7, vẫn có thể truy cập được bên ngoài câu lệnh
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17. Biến này
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
18 sẽ có sẵn ở mọi nơi trong phạm vi của hàm
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
15.everywhere within the scope of the
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
15 function.

Các biến có

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8:

Khi hàm thứ hai

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
21 được gọi là thanh biến, được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8, chỉ có thể truy cập được bên trong câu lệnh
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17. Bởi vì các biến được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 là phạm vi khối (trong đó một khối là mã giữa các dấu ngoặc xoăn, ví dụ
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
25,
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
26,
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
27).block scoped (where a block is the code between curly brackets e.g
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
25 ,
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
26,
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
27).

for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }8 Biến không được nâng lên:

Một sự khác biệt khác giữa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 và
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 là các biến có khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 không được nâng lên. Một ví dụ là cách tốt nhất để minh họa hành vi này:don't get hoisted. An example is the best way to illustrate this behavior:

Các biến có

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 không được nâng lên:don't get hoisted:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
8

Các biến với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 không được nâng lên:do get hoisted:

var foo = "Foo";  // globally scoped
let bar = "Bar"; // not allowed to be globally scoped

console.log(window.foo); // Foo
console.log(window.bar); // undefined
9

Toàn cầu for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }8 không được gắn vào var funcs = []; // let's create 3 functions for (var i = 0; i < 3; i++) { // and store them in funcs funcs[i] = function() { // each should log its value. console.log("My value: " + i); }; } for (var j = 0; j < 3; j++) { // and now let's run each one to see funcs[j](); }70:

Một biến được khai báo với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 trong phạm vi toàn cầu (đó là mã không có trong hàm) không được thêm vào như một thuộc tính trên đối tượng toàn cầu
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
70. Ví dụ: mã này nằm trong phạm vi toàn cầu):

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
0

Khi nào

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 được sử dụng trên
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7?

Sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 trên
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 bất cứ khi nào bạn có thể vì nó chỉ đơn giản là phạm vi cụ thể hơn. Điều này làm giảm xung đột đặt tên tiềm năng có thể xảy ra khi xử lý một số lượng lớn các biến.
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 có thể được sử dụng khi bạn muốn một biến toàn cầu rõ ràng là trên đối tượng
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
70 (luôn luôn cân nhắc cẩn thận nếu điều này thực sự cần thiết).

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Suraj Rao

29.2k11 Huy hiệu vàng95 Huy hiệu bạc102 Huy hiệu đồng11 gold badges95 silver badges102 bronze badges

Đã trả lời ngày 9 tháng 9 năm 2018 lúc 13:08Sep 9, 2018 at 13:08

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 rất thú vị, bởi vì nó cho phép chúng ta làm điều gì đó như thế này:

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
1

Dẫn đến việc đếm [0, 7].

Nhưng trái lại

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
2

Chỉ tính [0, 1].

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 8 tháng 7 năm 2016 lúc 0:21Jul 8, 2016 at 0:21

DMYTRODMYTRODmytro

4.8924 Huy hiệu vàng37 Huy hiệu bạc 50 Huy hiệu Đồng4 gold badges37 silver badges50 bronze badges

2

Có vẻ như, ít nhất là trong Visual Studio 2015, TypeScript 1.5, "VAR" cho phép nhiều khai báo của cùng một tên biến trong một khối và "LET" không.

Điều này sẽ không tạo ra lỗi biên dịch:

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
3

Điều này sẽ:

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
4

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

John Slegers

43K22 Huy hiệu vàng194 Huy hiệu bạc163 Huy hiệu đồng22 gold badges194 silver badges163 bronze badges

Đã trả lời ngày 11 tháng 8 năm 2015 lúc 0:35Aug 11, 2015 at 0:35

RdocrdocRDoc

1852 Huy hiệu bạc8 Huy hiệu đồng2 silver badges8 bronze badges

Giải thích này được lấy từ một bài báo tôi đã viết ở Medium:

Tăng cường là một cơ chế JavaScript trong đó các biến và khai báo chức năng được chuyển đến đầu phạm vi của chúng bởi trình phân tích cú pháp đọc mã nguồn thành một biểu diễn trung gian trước khi thực hiện mã thực tế bắt đầu bởi trình thông dịch JavaScript. Vì vậy, nó thực sự không quan trọng khi các biến hoặc hàm được khai báo, chúng sẽ được chuyển lên đỉnh phạm vi của chúng bất kể phạm vi của chúng là toàn cầu hay địa phương. Điều này có nghĩa rằng

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
5

thực sự được giải thích là

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
6

Vì vậy, như chúng ta đã thấy vừa bây giờ, các biến

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 đang được nâng lên đỉnh phạm vi của chúng và đang được khởi tạo với giá trị của không xác định, điều đó có nghĩa là chúng ta thực sự có thể gán giá trị của chúng trước khi thực sự khai báo chúng trong mã như vậy:

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
7

Liên quan đến khai báo chức năng, chúng ta có thể gọi chúng trước khi thực sự tuyên bố chúng như vậy:

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
8

Mặt khác, các biểu thức chức năng không được nâng lên, vì vậy chúng tôi sẽ gặp lỗi sau:

'use strict';
var foo = "foo1";
var foo = "foo2"; // No problem, 'foo1' is replaced with 'foo2'.

let bar = "bar1"; 
let bar = "bar2"; // SyntaxError: Identifier 'bar' has already been declared
9

ES6 đã giới thiệu các nhà phát triển JavaScript

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 và
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 từ khóa. Trong khi
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 và
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 có khối và không hoạt động được phạm vi như
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7, nó không nên tạo ra sự khác biệt trong khi thảo luận về hành vi nâng cao của họ. Chúng tôi sẽ bắt đầu từ cuối, các vận thăng JavaScript
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 và
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38.

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

Như chúng ta có thể thấy ở trên,

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 không cho phép chúng ta sử dụng các biến không được khai báo, do đó trình thông dịch xuất hiện rõ ràng một lỗi tham chiếu cho biết biến
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
54 không thể được truy cập trước khi khởi tạo. Lỗi tương tự sẽ xảy ra nếu chúng ta thay đổi trên
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 thành
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38

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

Vì vậy, dòng dưới cùng, trình phân tích cú pháp JavaScript tìm kiếm các khai báo và chức năng biến và nâng chúng lên đỉnh phạm vi của chúng trước khi thực thi mã và gán các giá trị cho chúng trong bộ nhớ để trong trường hợp trình thông dịch sẽ gặp chúng trong khi thực thi mã, anh ta sẽ nhận ra chúng và sẽ có thể thực thi mã với các giá trị được gán của chúng. Các biến được khai báo với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 hoặc
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 vẫn chưa được cung cấp khi bắt đầu thực hiện trong khi các biến được khai báo với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 đang được khởi tạo với giá trị
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
4.

Tôi đã thêm hình minh họa trực quan này để giúp hiểu làm thế nào các biến và chức năng được lưu trong bộ nhớ

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 12 tháng 1 lúc 18:20Jan 12 at 18:20

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Ran Turnerran TurnerRan Turner

Huy hiệu vàng 11,5K44 gold badges31 silver badges44 bronze badges

1

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 là biến phạm vi toàn cầu (có thể kéo).

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 và
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 là phạm vi khối.

test.js

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

Đã trả lời ngày 28 tháng 10 năm 2017 lúc 12:42Oct 28, 2017 at 12:42

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

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

var

Trong mẫu mã này, biến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 được khai báo bằng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7. Do đó, nó có một phạm vi chức năng. Điều đó có nghĩa là bạn có thể truy cập
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 chỉ từ bên trong
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
67. Bạn không thể đọc nó từ bên ngoài
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
67

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

Trong mẫu này, bạn có thể thấy

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 được khai báo bên trong một khối
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17. Nhưng nó được tuyên bố bằng cách sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7. Do đó, nó có phạm vi chức năng. Nó có nghĩa là bạn vẫn có thể truy cập biến
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 bên trong
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
67. Bởi vì
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 luôn được đưa vào các chức năng. Mặc dù biến
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 được khai báo bên trong khối
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17, vì nó sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7, nó được đưa vào cha mẹ
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
67.

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

Bây giờ biến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 được khai báo bên trong
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
80. Do đó,
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 phạm vi đến
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
80. Bạn có thể truy cập
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 bên trong
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
80. Nhưng không phải từ bên ngoài
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
80.

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

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

Cho phép, const

Đặt và const có phạm vi khối.

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 và
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 hành xử giống nhau. Nhưng sự khác biệt là, khi bạn gán giá trị cho
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38, bạn không thể gán lại. Nhưng bạn có thể đánh giá lại các giá trị với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8.

Trong ví dụ này, biến

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
02 được khai báo bên trong một khối
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17. Vì vậy, nó chỉ có thể được truy cập từ bên trong khối
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17 đó. Chúng tôi không thể truy cập nó từ bên ngoài khối
function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
17 đó. (ở đây
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38 hoạt động giống như
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8)

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

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

Một điểm khác biệt khác với

function run() {
  console.log(foo); // undefined
  var foo = "Foo";
  console.log(foo); // Foo
}

run();
96 so với
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 là bạn có thể truy cập biến được xác định
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 trước khi khai báo. Nó sẽ cung cấp cho bạn
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
4. Nhưng nếu bạn làm điều đó với biến được xác định
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 hoặc
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
38, nó sẽ cho bạn một lỗi.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
0

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
1

Đã trả lời ngày 10 tháng 9 lúc 10:48Sep 10 at 10:48

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

KasunkasunKasun

5213 Huy hiệu bạc14 Huy hiệu Đồng3 silver badges14 bronze badges

Khi sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8

Từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 đính kèm khai báo biến vào phạm vi của bất kỳ khối nào (thường là cặp
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
04) mà nó chứa trong các từ khác, ________ 88 hoàn toàn chiếm đoạt bất kỳ phạm vi nào của khối cho khai báo biến của nó.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 Các biến không thể được truy cập trong đối tượng
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
70 vì chúng không thể được truy cập toàn cầu.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
2

Khi sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 và các biến trong ES5 có phạm vi trong các hàm có nghĩa là các biến có giá trị trong hàm và không nằm ngoài chính hàm.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 Các biến có thể được truy cập trong đối tượng
var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
70 vì chúng không thể được truy cập toàn cầu.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
3

Nếu bạn muốn biết thêm tiếp tục đọc bên dưới

Một trong những câu hỏi phỏng vấn nổi tiếng nhất trên phạm vi cũng có thể đủ sử dụng chính xác

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 và
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 như dưới đây;

Khi sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
4

Điều này là do khi sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8, đối với mỗi lần lặp lại, biến được phạm vi và có bản sao riêng.

Khi sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
5

Điều này là do khi sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7, cho mỗi lần lặp lại, biến được phân chia và đã chia sẻ bản sao.

Đã trả lời ngày 22 tháng 5 năm 2018 lúc 13:12May 22, 2018 at 13:12

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Ankur Soniankur SoniAnkur Soni

5.3955 Huy hiệu vàng45 Huy hiệu bạc75 Huy hiệu Đồng5 gold badges45 silver badges75 bronze badges

Nếu tôi đọc thông số kỹ thuật ngay sau đó

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 rất may cũng có thể được tận dụng để tránh tự gọi các chức năng được sử dụng để mô phỏng các thành viên duy nhất riêng tư - một mô hình thiết kế phổ biến làm giảm khả năng đọc mã, làm phức tạp việc gỡ lỗi, không thêm bảo vệ mã thực hoặc lợi ích khác - ngoại trừ có thể thỏa mãn Mong muốn của ai đó về ngữ nghĩa, vì vậy hãy ngừng sử dụng nó. /rantthankfully can also be leveraged to avoid self invoking functions used to simulate private only members - a popular design pattern that decreases code readability, complicates debugging, that adds no real code protection or other benefit - except maybe satisfying someone's desire for semantics, so stop using it. /rant

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
6

Xem 'Mô phỏng giao diện riêng'

Đã trả lời ngày 14 tháng 10 năm 2016 lúc 5:01Oct 14, 2016 at 5:01

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

2

Một số hack với

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8:

1.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
7

2.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
8

3.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Clicking on each number will log to console:</p> 
<div id="div1">1</div>
<div id="div2">2</div>
<div id="div3">3</div>
<div id="div4">4</div>
<div id="div5">5</div>
9

Getter và setter với for(let i=1; i<6; i++) { $("#div" + i).click(function () { console.log(i); }); }8:

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
0

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 21 tháng 7 năm 2016 lúc 17:42Jul 21, 2016 at 17:42

Zloctbzloctbzloctb

9,9606 Huy hiệu vàng67 Huy hiệu bạc85 Huy hiệu Đồng6 gold badges67 silver badges85 bronze badges

3

Tôi vừa bắt gặp một trường hợp sử dụng mà tôi phải sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 trên
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 để giới thiệu biến mới. Đây là một trường hợp:

Tôi muốn tạo một biến mới với tên biến động.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
1
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
2

Mã trên không hoạt động vì

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
23 giới thiệu một khối mã mới. Tuyên bố sử dụng
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 sẽ khai báo một biến bên ngoài khối mã này kể từ khi
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 khai báo một biến trong phạm vi hàm.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8, mặt khác, khai báo một biến trong phạm vi khối. Vì vậy, biến
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
27 sẽ chỉ hiển thị trong khối
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
23.

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 25 tháng 10 năm 2020 lúc 17:15Oct 25, 2020 at 17:15

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Sarvar nsarvar nSarvar N

11.3k8 Huy hiệu vàng64 Huy hiệu bạc62 Huy hiệu Đồng8 gold badges64 silver badges62 bronze badges

2

Đặt vs var. Đó là tất cả về phạm vi.scope.

Các biến VAR là toàn cầu và có thể được truy cập về cơ bản ở khắp mọi nơi, trong khi các biến không toàn cầu và chỉ tồn tại cho đến khi dấu ngoặc đơn kết thúc giết chết chúng. and can be accessed basically everywhere, while let variables are not global and only exist until a closing parenthesis kills them.

Xem ví dụ của tôi dưới đây và lưu ý cách biến (LET) biến hoạt động khác nhau trong hai bảng điều khiển.log; Nó trở nên ngoài phạm vi trong bảng điều khiển thứ 2.log.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
3

Đã trả lời ngày 18 tháng 4 năm 2019 lúc 0:49Apr 18, 2019 at 0:49

DacodadacodadaCoda

3.2974 Huy hiệu vàng31 Huy hiệu bạc35 Huy hiệu Đồng4 gold badges31 silver badges35 bronze badges

Dưới đây cho thấy cách 'LET' và 'VAR' khác nhau trong phạm vi:

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
4

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
29, được xác định bởi
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 ban đầu nằm trong phạm vi toàn cầu và khi chúng tôi khai báo
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
29 một lần nữa bên trong
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
32 phạm vi của nó đã thay đổi và khi một giá trị mới được gán cho biến bên trong phạm vi đó, nó không ảnh hưởng đến phạm vi toàn cầu.global scope, and when we declare
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
29 again inside the
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
32 its scope changed and when a new value is assigned to the variable inside that scope it does not affect the global scope.

Trong khi

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
33, được xác định bởi
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 ban đầu nằm trong phạm vi toàn cầu, nhưng một lần nữa khi chúng tôi tuyên bố nó bên trong
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
32, nó xem xét phạm vi toàn cầu HFOO, mặc dù VAR đã được sử dụng một lần nữa để tuyên bố nó. Và khi chúng tôi gán lại giá trị của nó, chúng tôi thấy rằng phạm vi toàn cầu HFOO cũng bị ảnh hưởng. Đây là sự khác biệt chính.global scope, but again when we declare it inside the
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
32, it considers the global scope hfoo, although var has been used again to declare it. And when we re-assign its value we see that the global scope hfoo is also affected. This is the primary difference.

Đã trả lời ngày 7 tháng 9 năm 2019 lúc 11:25Sep 7, 2019 at 11:25

Piklu DEYPIKLU DEYPiklu Dey

Huy hiệu Huy hiệu Bạc 19011 silver badge13 bronze badges

Hãy là một phần của ES6. Các chức năng này sẽ giải thích sự khác biệt theo cách dễ dàng.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
5

Đã trả lời ngày 17 tháng 12 năm 2017 lúc 10:47Dec 17, 2017 at 10:47

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Vipul Jainvipul JainVipul Jain

Huy hiệu đồng 941 Bạc4 Huy hiệu đồng1 silver badge4 bronze badges

Như được đề cập ở trên:

Sự khác biệt là phạm vi.

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 được phạm vi đến khối hàm gần nhất và
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 được phân chia đến khối bao quanh gần nhất, có thể nhỏ hơn một khối hàm. Cả hai đều là toàn cầu nếu bên ngoài bất kỳ khối nào. Hãy xem một ví dụ:function block and
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 is scoped to the nearest enclosing block, which can be smaller than a function block. Both are global if outside any block.Lets see an example:

Example1:

Trong cả hai ví dụ của tôi, tôi có một hàm

function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
38.
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
38 chứa một biến
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 bằng 10. Trong ví dụ đầu tiên của tôi, tôi kiểm tra xem
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 có bằng 10 (
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
42) không. Nếu có, tôi Agian khai báo một biến
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 (bây giờ tôi có hai biến myVar) bằng cách sử dụng từ khóa
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 và gán cho nó một giá trị mới (20). Trong dòng tiếp theo, tôi in giá trị của nó trên bảng điều khiển của tôi. Sau khối có điều kiện, tôi lại in giá trị của
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 trên bảng điều khiển của tôi. Nếu bạn nhìn vào đầu ra của
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
38,
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 có giá trị bằng 20.

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Ví dụ2: Trong ví dụ thứ hai của tôi thay vì sử dụng từ khóa

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 trong khối có điều kiện của tôi, tôi khai báo
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 bằng cách sử dụng từ khóa
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8. Bây giờ khi tôi gọi
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
38, tôi nhận được hai đầu ra khác nhau:
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
52 và
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
53.
In my second example instead of using
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
7 keyword in my conditional block I declare
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
40 using
for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8 keyword . Now when I call
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
38 I get two different outputs:
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
52 and
function checkHoisting() {
  console.log(foo); // ReferenceError
  let foo = "Foo";
  console.log(foo); // Foo
}

checkHoisting();
53.

Vì vậy, sự khác biệt rất đơn giản, tức là phạm vi của nó.

Đã trả lời ngày 7 tháng 8 năm 2018 lúc 10:25Aug 7, 2018 at 10:25

N Randhawan RandhawaN Randhawa

8.1333 huy hiệu vàng41 Huy hiệu bạc47 Huy hiệu đồng3 gold badges41 silver badges47 bronze badges

1

Bây giờ tôi nghĩ rằng có một phạm vi tốt hơn của các biến đến một khối các câu lệnh bằng cách sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8:

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
6

Tôi nghĩ mọi người sẽ bắt đầu sử dụng LET ở đây sau đó để họ có phạm vi tương tự trong JavaScript như các ngôn ngữ khác, Java, C#, v.v.

Những người không hiểu rõ về phạm vi trong JavaScript được sử dụng để phạm sai lầm sớm hơn.

Tăng cường không được hỗ trợ bằng cách sử dụng

for(let i=1; i<6; i++) {
  $("#div" + i).click(function () { console.log(i); });
}
8.

Với các lỗi tiếp cận này có trong JavaScript đang bị xóa.

Tham khảo ES6 theo chiều sâu: Cho và Const để hiểu nó tốt hơn.

Hướng dẫn should i use let or var in javascript? - tôi có nên sử dụng let hay var trong javascript không?

Đã trả lời ngày 1 tháng 7 năm 2016 lúc 8:22Jul 1, 2016 at 8:22

0

Cái nào tốt hơn cho hoặc var trong javascript?

VAR và cho phép cả hai được sử dụng để khai báo biến trong JavaScript nhưng sự khác biệt giữa chúng là VAR là chức năng phạm vi và LET là Khối phạm vi.... JavaScript ..

VAR có tốt hơn LET không?

Cho phép bạn khai báo các biến bị giới hạn trong phạm vi cho khối, câu lệnh hoặc biểu thức mà nó được sử dụng.Điều này không giống như từ khóa VAR, xác định một biến trên toàn cầu hoặc cục bộ với toàn bộ hàm bất kể phạm vi khối.

Có phải và VAR cần thiết trong JavaScript?

Điều đầu tiên chúng tôi học được là đối với hầu hết các mục đích, VAR và không hoàn toàn cần thiết trong JavaScript.Nói một cách đại khái, các cấu trúc phạm vi với phạm vi từ vựng có thể được chuyển đổi một cách cơ học thành các đối số chức năng.for most purposes, var and let aren't strictly necessary in JavaScript. Roughly speaking, scoping constructs with lexical scope can be mechanically transformed into functional arguments.

Vẫn còn được sử dụng trong JavaScript?

Từ khóa LET được sử dụng để khai báo các biến trong JavaScript.Từ khóa VAR cũng có thể được sử dụng để khai báo các biến, nhưng sự khác biệt chính giữa chúng nằm trong phạm vi của chúng.. The var keyword can also be used to declare variables, but the key difference between them lies in their scopes.