let實際上爲 JavaScript 新增了塊級做用域。
var聲明全局做用域,let聲明局部做用域html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>Title</title> </head> <body> </body> <script> let a = 10; var b = 18; {let c = 28} let d = 38; console.log(d); // 38 console.log(c); // 報錯。 c is not defined console.log(window.a); // undefined console.log(window.b); //18 </script> </html>
const實際上保證的,並非變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。對於簡單類型的數據(數值、字符串、布爾值),值就保存在變量指向的那個內存地址,所以等同於常量。但對於複合類型的數據(主要是對象和數組),變量指向的內存地址,保存的只是一個指向實際數據的指針,const只能保證這個指針是固定的(即老是指向另外一個固定的地址),至於它指向的數據結構是否是可變的,就徹底不能控制了數組
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>Title</title> </head> <body> </body> <script> const a = 10; // let a = 35; //報錯 const list = []; list.push('hello'); //成功 // list = ['大吉大利'] // 報錯 const dict = {}; dict.prop = 125; console.log(dict); // {prop: 125} </script> </html>