Quy tắc phạm viSự 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).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éoMặ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
RedclarationTrong 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>
Đã trả lời ngày 27 tháng 5 năm 2015 lúc 10:16May 27, 2015 at 10:16 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ì?Để 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:
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 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 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); });
}8Phạm vi khốiCá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]();
} 1Bên trong một chức năngBê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]();
} 2Bên trong một khốiCá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]();
} 3Bên trong một vòng lặpCá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]();
} 4Vòng lặp với đóng cửaNế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]();
} 5Khu vực chết tạm thờiDo 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]();
} 6Không khai báo lạiBạ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]();
} 7var 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]();
}38var 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ạiBiế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]();
} 8Lư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]();
} 9Nế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(); 0Khởi tạo là bắt buộcBạ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 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 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(); 6Khi đượ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(); 7Cũ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 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): 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 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(); 9Trê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(); 0Cuộ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(); 1for(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(); 2Tuy 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); });
} 8function checkHoisting() {
console.log(foo); // ReferenceError
let foo = "Foo";
console.log(foo); // Foo
}
checkHoisting(); 3Bở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
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: 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).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!).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 đó.- 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. 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(); 4Ngượ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(); 5Ngượ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(); 64. 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(); 75. 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(); 8Cụ thể, đầu ra này: function checkHoisting() {
console.log(foo); // ReferenceError
let foo = "Foo";
console.log(foo); // Foo
}
checkHoisting(); 9Trong 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 3Quá 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 4Lầ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 Đã trả lời ngày 17 tháng 12 năm 2015 lúc 3:22Dec 17, 2015 at 3:22 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 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 7Cá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 8Cá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 9Toà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 0Khi 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). 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 1Dẫ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 2Chỉ tính [0, 1]. Đã 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
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 5thự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 6Vì 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 7Liê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 8Mặ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 9ES6 đã 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); });
} 0Như 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]();
} 38for(var i=1; i<6; i++) {
$("#div" + i).click(function () { console.log(i); });
} 1Vì 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ớ
Đã trả lời ngày 12 tháng 1 lúc 18:20Jan 12 at 18:20 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 for(var i=1; i<6; i++) {
$("#div" + i).click(function () { console.log(i); });
} 3var 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(); 67for(var i=1; i<6; i++) {
$("#div" + i).click(function () { console.log(i); });
} 4Trong 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); });
} 5Bâ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); });
} 6for(var i=1; i<6; i++) {
$("#div" + i).click(function () { console.log(i); });
} 7Cho 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); });
} 8for(var i=1; i<6; i++) {
$("#div" + i).click(function () { console.log(i); });
} 9Mộ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 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> 2Khi 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> 3Nế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 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> 6Xem '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
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> 72. <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> 83. <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> 9Getter 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
Đã 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); });
} 1for(let i=1; i<6; i++) {
$("#div" + i).click(function () { console.log(i); });
} 2Mã 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.
Đã trả lời ngày 25 tháng 10 năm 2020 lúc 17:15Oct 25, 2020 at 17:15
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); });
} 4function 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 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.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); });
} 6Tô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. Đã 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. |