60
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Có phải xác định các biến JavaScript bên trong if-statements đúng không?
if[a==1]{
var b = 1;
} else {
var b = 0;
}
Tôi biết mã trên sẽ hoạt động, tuy nhiên, webmatrix làm nổi bật các biến.
Tôi có nên xác định các biến bên ngoài if-satement không? Hay tùy chọn đầu tiên đúng? Hoặc nó không thực sự quan trọng?
var b = '';
if[a==1]{
b = 1;
} else {
b = 0;
}
hỏi ngày 17 tháng 7 năm 2012 lúc 23:05Jul 17, 2012 at 23:05
Kể từ bản phát hành chính thức của ES2017 Spec [2017-07-08], ECMAscript không hỗ trợ phạm vi khối thực hiện bằng cách sử dụng từ khóa let
hoặc const
.does support true block scope now using the let
or const
keywords.
Vì Ecmascript không có phạm vi khối nhưng phạm vi chức năng, nên việc khai báo bất kỳ biến nào trên đỉnh của bối cảnh chức năng của bạn.
Mặc dù bạn có thể thực hiện các khai báo biến và chức năng tại bất kỳ điểm nào trong bối cảnh chức năng, nhưng nó rất khó hiểu và mang lại một số đau đầu kỳ lạ nếu bạn không nhận thức đầy đủ về hậu quả.
Ví dụ đau đầu:
var foo = 10;
function myfunc[] {
if [foo > 0] {
var foo = 0;
alert['foo was greater than 0'];
} else {
alert['wut?'];
}
}
Đoán xem, chúng ta đang nhận được một 'wut?' Cảnh báo khi gọi myfunc
ở đây. Đó là bởi vì một trình thông dịch ECMAScript sẽ tự động phát vào bất kỳ tuyên bố và chức năng nào của var
lên đầu bối cảnh. Về cơ bản, foo
được khởi tạo thành undefined
trước lần đầu tiên if statement
.
Đọc thêm: Phạm vi JavaScript và Hoisting
Đã trả lời ngày 17 tháng 7 năm 2012 lúc 23:07Jul 17, 2012 at 23:07
JandyjandyjAndy
226K56 Huy hiệu vàng301 Huy hiệu bạc356 Huy hiệu Đồng56 gold badges301 silver badges356 bronze badges
2
Lưu ý rằng ECMAScript 6 không hỗ trợ các biến cấp khối bằng cách sử dụng từ khóa 'var'. Mặc dù các biến được khai báo với 'var' được nâng lên là phạm vi chức năng bất kể chúng được khai báo ở đâu, nhưng những biến được xác định bằng cách sử dụng 'LET' chỉ được đưa vào khối kèm theo.
Đã trả lời ngày 18 tháng 1 năm 2017 lúc 23:49Jan 18, 2017 at 23:49
Farhadffarhadffarhadf
1.8783 huy hiệu vàng19 Huy hiệu bạc27 Huy hiệu đồng3 gold badges19 silver badges27 bronze badges
Đặt một var bên trong một câu lệnh IF không chống lại "các quy tắc" của ngôn ngữ, nhưng điều đó có nghĩa là, vì var phát, VAR sẽ được xác định bất kể điều kiện của câu lệnh IF có được thỏa mãn hay không.
Đã trả lời ngày 17 tháng 7 năm 2012 lúc 23:09Jul 17, 2012 at 23:09
1
Bởi vì các biến của JavaScript có phạm vi cấp độ chức năng, ví dụ đầu tiên của bạn đang được điều chỉnh lại một cách hiệu quả biến của bạn, điều này có thể giải thích lý do tại sao nó được làm nổi bật.
Trên các phiên bản cũ của Firefox, chế độ JavaScript nghiêm ngặt của nó được sử dụng để cảnh báo về sự điều chỉnh lại này, tuy nhiên một trong những nhà phát triển của nó đã phàn nàn rằng nó chật chội phong cách của anh ấy nên cảnh báo đã bị tắt. [Các phiên bản hiện tại của Firefox hỗ trợ cú pháp khai báo biến cấp khối.]
Đã trả lời ngày 17 tháng 7 năm 2012 lúc 23:11Jul 17, 2012 at 23:11
NeilneilNeil
53.5K8 Huy hiệu vàng58 Huy hiệu bạc71 Huy hiệu đồng8 gold badges58 silver badges71 bronze badges
Xem hàm
var b = '';
if[a==1]{
b = 1;
} else {
b = 0;
}
0 về phạm vi của các biến trong JavaScript là gì?Tính đến năm 2012, không có phạm vi cấp độ khối trong JavaScript. Vì vậy, phiên bản đầu tiên của bạn là tốt: các biến được xác định trong phạm vi bên ngoài khối
var b = '';
if[a==1]{
b = 1;
} else {
b = 0;
}
1.
Đã trả lời ngày 17 tháng 7 năm 2012 lúc 23:07Jul 17, 2012 at 23:07
Jandyjandyhcarver
226K56 Huy hiệu vàng301 Huy hiệu bạc356 Huy hiệu Đồng4 gold badges39 silver badges67 bronze badges
3