通過var定義的變數,作用域是整個封閉函式,是全域的 。通過let定義的變數,作用域是在塊級或是子塊中。
console.
log(fun)
;//undefined
var fun=2;
console.
log(fun)
;//2
var fun=45;
//不會報錯
let fun=46;
//會報錯
<
/script>
變數提公升現象:瀏覽器在執行**之前會進行預解析,首先解析函式宣告,定義變數,解析完之後再對函式、變數進行執行、賦值等。
-不論var宣告的變數處於當前作用域的第幾行,都會提公升到作用域的頭部。
-var 宣告的變數會被提公升到作用域的頂部並初始化為undefined,而let宣告的變數在作用域的頂部未被初始化
for(
var i =
0; i <
5; i++
) console.
log(i)
;//5
for(
let j =
0; j <
5; j++
) console.
log(j)
;//uncaught referenceerror: i is not defined
<
/script>
let關鍵字
let關鍵字用來宣告變數,使用let宣告的變數有幾個特點:
1)不允許重複宣告
2)塊兒級作用域
3)不存在變數提公升
4)不影響作用域鏈
應用場景:以後宣告變數使用let就對了
//宣告變數
let a;
let b,c,d;
let e =
100;
let f =
521, g =
'iloveyou'
, h =
;//變數不能重複宣告
let star =
'羅志祥'
;let star =
'小豬'
;// if else while for
console.
log(girl)
;//不存在變數提公升
console.
log(song)
;// cannot access 'song' before initialization
let song =
'戀愛達人'
;//不影響作用域鏈fn(
);}<
/script>
2.2.const 關鍵字
const關鍵字用來宣告常量,const宣告有以下特點
1)宣告必須賦初始值
2)識別符號一般為大寫
3)不允許重複宣告
4)值不允許修改
5)塊兒級作用域
注意:物件屬性修改和陣列元素變化不會出發const錯誤
應用場景:宣告物件型別使用const,非物件型別宣告選擇let
//宣告常量
const
school
='尚矽谷'
;//1. 一定要賦初始值
consta;
//2. 一般常量使用大寫(潛規則)
const a =
100;
//3. 常量的值不能修改
school
='atguigu'
;//4. 塊兒級作用域
console.
log(
player);
//player is not defined
//5. 對於陣列和物件的元素修改, 不算做對常量的修改, 不會報錯
const
team=[
'uzi'
,'mxlg'
,'ming'
,'letme'];
team
.push
('meiko'
);
ES6中let和const命令
es6中新增了 let 命令,用於宣告變數,關於let有以下幾個特點 1 用法類似於var,但是所宣告的變數只在 let 命令所在的 塊內有效,實現了塊級作用域且不會汙染全域性變數。2 不存在變數提公升 3 暫時性死區 4 同乙個變數在相同作用域內不允許重複宣告 下面圍繞這四個特點進行詳細的分析 l...
ES6中let和const詳解
let和var一樣也是用來定義變數,不同之處在於let是塊級作用域,只在所定義的塊級作用域中生效,乙個花括號便是乙個塊級作用域 console.log a 我是var定義的 console.log b b is not defined 可以看出let定義的變數在全域性作用域內並沒有生效 如果我們在全...
ES6中的let和var區別
js函式中宣告變數有多種方式 var,let,this 見如下 段 var xx function test 那麼,這三種方式有什麼區別呢?區別在於作用域不同。let 宣告的變數作用域為某個 塊。而 塊的長度可大可小。當按宣告2的方式宣告乙個變數時,該變數的作用範圍於為整個function語句。當按...