var 、let 關鍵字
1.var宣告的變數,會成為包含它的函式的區域變數,該變數會在函式退出時銷毀,
如果省略var關鍵字,則會創建一個全域變數(不建議),
function test() { var message1 = "hi"; // 區域變數 message2 = "hi"; // 全域變數 } test(); console.log(message1); // 出錯! console.log(message2); // "hi"
2.let 宣告的變數,范圍是塊作用域;const宣告的作用域也是塊,
if (true) { var name = 'tom'; console.log(name); // tom } console.log(name); // tom if (true) { let age = 22; console.log(age); // 22 } console.log(age); // ReferenceError: age沒有定義
同一個作用域也不能多次宣告(var 可以多次宣告,var和let也不能同時宣告);const也不允許重復宣告,
var name; var name; let age; let age; // SyntaxError var home; let home; // SyntaxError let sex; var sex; // SyntaxError
3.宣告提升:var 宣告的變數會提升到函式頂部,let宣告的變數則不會在作用域中提升(let宣告之前的執行瞬間成為“暫時性死區”),
// name會被提升 console.log(name); // undefined var name = 'name'; // age不會被提升 console.log(age); // ReferenceError:age沒有定義 let age = 26;
4.全域宣告:var宣告的變數,會成為window物件的屬性,let宣告的變數則不會,
var name = 'name'; console.log(window.name); // 'name' let age = 26; console.log(window.age); // undefined
5.for回圈中的宣告
使用var宣告的迭代變數,會滲透到回圈體外部;let宣告的則不會,使用let宣告的迭代變數,僅限于for回圈內部,
for (var i = 0; i < 5; ++i) { // 回圈邏輯 } console.log(i); // 5 for (let j = 0; j < 5; ++j) { // 回圈邏輯 } console.log(j); // ReferenceError: j沒有定義
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/106508.html
標籤:其他
下一篇:分享交流一些HTML5的新增元素
