變數宣告包括let var const
在這之前,需要提一點:
如果乙個變數沒有宣告直接被使用,那該變數自動會變為全域性變數。它們的區別如下:i = 10; // i現在是全域性變數
該缺陷是因為 在js設計之初,為了方便初學者而不要求強制申明變數導致的,
後面推出的strict模式修補了這一問題
在js**第一行寫上: 'use strict'
它的作用是在宣告了之後,會嚴格檢測該檔案內的變數是否通過var申明,若無則報錯
對其中的概念解釋如下:
1、作用域
作用域既是該值能夠生效,能夠被訪問的區域範圍。
var 為全域性作用域,let和const是區域性作用域(僅在函式體內可用)
if(true)
console.log(a); // a列印值為1
console.log(b); // b列印值為 undefined
console.log(c); // c列印值為 undefined
2、變數宣告
var 和 let可以僅宣告不賦值,但是const必須賦值,否則會報錯
var a = 1 //正確
let b = 1 //正確
const c = 1 //正確
var d //正確 d列印為undefined
let e //正確 e列印為undefined
const f //錯誤
3、是否可修改
var 和let宣告的變數可隨意修改,const宣告的變數 若為基礎型別(undefined null string number boolean)則不可修改,若為引用資料型別(object array), 可以修改值, 不可修改引用物件。
var a = 1;
a =2;
console.log(a) // 2
let b = 1;
b = 2;
console.log(b) // 2
//c為基本資料型別不可修改
const c = 1;
c = 2; //報錯
//d為引用資料型別
const d = [1,2,3];
d.push(4);//對引用資料型別進行值的修改可進行
console.log(d);// [1,2,3,4]
d[0] = 2; // [2,2,3,4]
d = [1,2,3,4,5] //對引用資料型別進行位址修改,報錯
簡單來講 就是const定義的變數 不可以直接修改該變數,若為非基本資料型別,可以修改該變數的值
4、是否可重複宣告
var 可重複宣告 let和const不可重複宣告
var a = 1;
var a = 2; //不報錯,可重複宣告
console.log(a); // 2
//let 和 const 情況相同
let a = 3;//報錯,上面已經宣告過a(var 宣告的也不可以)
let b = 1;
let b =2; //報錯,上面已經宣告過b
5、變數 提公升
var宣告的變數會進行變數提公升,但是賦值不提公升;let和const宣告的變數不會提公升。
console.log(v1);
var v1 = 100;
function foo()
foo();
console.log(v1);
輸出結果為 undefined undefined 200 100
為什麼呢?
因為這裡還有函式提公升,
函式宣告的優先順序是要高於變數宣告的 即 function foo() 的宣告,在**執行時會被提到最頂端
單純的變數提公升
function test () ;
test();
// 它的實際執行順序如下
function test ()
test();
// 即對a的宣告被提到了最頂部去執行
let var const的具體區別
if true console.log a a沒有被定義 這裡的乙個塊級作用域就是這if大括號內注意在定義變數的時候 無論是var,let還是const 都盡量都要先賦初始值,因為如果不賦初始值那麼undefined與任何數字進行加減乘除的時候結果都為nan 不了解變數提公升的小夥伴可以去 舉個例子...
let,var,const的使用區別
一 let宣告變數 1.let宣告的變數不會掛在window中,不會造成全域性變數的汙染 2.新增了乙個塊級作用域 以前只有函式作用域,全域性作用域 3.let是不允許重複宣告 4.let不會有宣告提前 只是人為看到的效果,實際上是有宣告提前,提前臨時性的死區中 cannot access num ...
let var const之間的區別
let是es6的新語法,用來區域性變數和var類似但是let只在 塊裡有效,也就是塊作用域 變數提公升是什麼意思這裡很多小夥伴會理解錯 var a 10 func function func 很奇怪這裡為什麼是undifined這就是變數提公升 上面的 等價於 var的變數提公升就是會先把var定義...