* 變數提公升
*var宣告的變數存在變數提公升
*let宣告的變數不存在變數提公升
* 作用域
*var定義的變數沒有塊作用域,只有函式作用域,可以跨塊訪問, 不能跨函式訪問。
*let定義的變數有塊作用域,在塊作用域裡定義的變數,只能在塊作用域裡訪問,不能跨塊訪問,也不能跨函式訪問。
* 變數名
* 同一作用域下,let不能宣告同名變數,var可以。
var a=
123;if(
true
)
* 報錯,是暫時性死區的原因,塊作用域裡的a繫結在塊作用域,let沒有變數提公升的概念,不能先使用再宣告。
* 在某乙個作用域內,如果存在某乙個變數,就會繫結該區域不再受外部影響
var person=
let str=
` `
;結果呈現:使用者的姓名為 ,年齡是
result.innerhtml=str;
*
let str =
`使用者的姓名為
$,年齡是$`
;
$
("#result").
("he is"
+person.name+
""
+"and we wish to
know his"+person.age+"
.that is all" )
*$(
"#result").
(`he is
$and we wish to know his
$.that is all`
);
let object =
;let
= object;
console.
log(firstname+
'\t'
+lastname)
;
* bill undefined
* 物件解構,按照屬性名,屬性名相同才能獲得值,否則為undefined。
var tmp =
newdate()
;functionf(
)}f(
)
//等價於
functionf(
)}var tmp;
tmp =
newdate()
;f()
;* undefined
* 在函式中使用函式內部的區域性變數,var定義的變數有宣告提前,輸出undefined。
//a程式:
var a =
;for
(let i =
0; i <
10; i++);
}a[8]
(); a[9]
();//b程式
var a =
;for
(var i =
0; i <
10; i++);
}a[8]
(); a[9]
();
*
a程式輸出: 89
*b程式輸出:
1010
* 執行完for迴圈,陣列中儲存了10個函式的引用
* 在b程式中,使用var宣告的變數i為全域性變數,執行完迴圈後,i為10,輸出的i為全域性的10
* 在a程式中,使用let宣告的變數有塊作用域,所以在for迴圈表示式中使用let其實就等價於在**塊中使用let,也就是說
*for
(let i =
0; i<
5; i++
) 這句話的圓括號之間,有乙個隱藏的作用域
*for
(let i =
0; i<
5; i++
) 在每次執行迴圈體之前,js 引擎會把 i 在迴圈體的上下文中重新宣告及初始化一次。
學習記錄 ES6(2020 12 07)
class person 年齡 say 年齡 let p newperson 張三 23 let str p.say console.log str script 結果 var p newperson console.log p.proto person.prototype 結果 true 類和建構...
學習記錄 ES6 module
export 和 import 簡單的例子 a.js export const a i am a index.js import from a.js console.log a i am a export import 嚴格模式 export 的具體使用方式,以及 import 的具體使用方式 de...
ES5學習記錄 1
進入嚴格模式只需要使用 use strict 這條語句即可。對於支援嚴格模式的瀏覽器,會在宣告 use strict 語句之後的 都將會在嚴格模式的限制下執行。對於不支援嚴格模式的瀏覽器,這個宣告只是乙個簡單的字串,不會產生任何影響。使用 嚴格模式的宣告必須放在指令碼第一行,否則整個指令碼會以正常模...