如果我們要我們今天要再字串裡面加入值,就會需要使用到+號。常常我們如果要想要使用 innerHTML 來渲染變數,就會在變數裡面存放一大串的 html 結構,並且用+號將數值連起來,如果為了排版,我們還必須加上\ 來換行,這樣其實相當麻煩。
1 2 3 4 5 6 7 8
let dataArr = ['Peter','Merry','Leo']; let text = '我叫做'+dataArr[0]; console.log(text); let list = '<ul>\ <li>'+dataArr[0]+'</li>\ <li>'+dataArr[1]+'</li>\ <li>'+dataArr[2]+'</li>\ <ul>';
let dataArr = ['Peter','Merry','Leo']; let text = `我叫做${dataArr[0]}`; let list = ` <ul> <li>${dataArr[0]}</li> <li>${dataArr[1]}</li> <li>${dataArr[2]}</li> <ul> `; document.getElementById('content').innerHTML=list;
所先我們先複習一下 Hoisting ,就是變數和函數的宣告,會在編譯階段就被放進記憶體。今天如我們分別使用 let 和 var 宣告變數,並且在宣告前使用 consolo 顯示出變數,會發現使用 let 宣告的變數是 not defined,代表還沒有配置記憶體空間給這個變數,而使用 var 宣告的則是 undefined ,代表已經宣告記憶體給這個變數。
1 2 3 4
console.log(name1) //not defined console.log(name2) //undefined let name1 = 'Leo'; var name2 = 'Peter';
作用域差異
var 作用域是 function scope,let 作用域是 block。因此只要是我們在函數裡面用 var 宣告的變數都會有影響,像是如果我們在 show1 函數中使用 var 宣告兩次 name ,if 條件式裡面用 var 宣告的 name 也會影響原本使用 var 宣告的變數 name,因此 name 被改成了 Peter。但是如果我們是使用 let 宣告變數,像是 show2 函數,if 裡面使用 let 宣告的變數因為只在那個 if 條件的區塊(block) 產生作用,所以不會影響原本宣告的 name 變數,變數 name 還是 Leo。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
functionshow1(){ var name = 'Leo' if(true){ var name = 'Peter' } console.log(name); } // 顯示 peter <!-- more --> functionshow2(){ let name = 'Leo' if(true){ let name = 'Peter' } console.log(name); } // 顯示 Leo