面試官竟然問我JavaScript中var、let和const有什麼區別?

在JavaScript中有三種聲明變量的方式:var、let、const。

目錄
1.var

  1. let
  2. const
    1.var
    (1)var定義的變量在之後可以修改,如果不初始化會輸出undefined,不會報錯。

var a;
console.log(a); // undefined
// -----------------------------
console.log(a); // undefined
var a = 1;
1
2
3
4
5
(2)var定義的變量,可以跨塊訪問, 不能跨函數訪問。

(3)var只有函數作用域,沒有塊級作用域。

(4)var的作用域是函數作用域,var可以用來聲明全局變量,也可以聲明局部變量。在一個函數內利用var聲明一個變量,則這個變量只在這個函數內有效。

全局變量:在函數外定義的變量,作用域是整個代碼文件。
局部變量:在函數內定義的變量,作用域是當前的函數內部。
var a = 666;
console.log("函數外var定義a:" + a); // 函數外var定義a:666
利率決議 http://www.gendan5.com/decision/jpy.html
function cg(){
a = 888;
console.log("函數內var定義a:" + a);// 函數內var定義a:888
}

cg();
console.log("函數調用後var定義a爲函數內部修改值:" + a);
// 函數調用後var定義a爲函數內部修改值:888
1
2
3
4
5
6
7
8
9
10
11
(5)可以重複定義,後面的值會覆蓋前面的。

var a = 1;
var a = 2;
console.log(a); // 2
1
2
3

  1. let
    (1)let是塊級作用域,函數內部使用let定義後,對函數外部無影響。

let a = 666;
console.log("函數外let 定義a:" + a); // 函數外let 定義a:666

function cg(){
let a = 888;
console.log("函數內let 定義a:" + a);// 函數內let 定義a:888
}

cg();
console.log("函數調用後let 定義a爲函數內部修改值:" + a);
// 函數調用後let定義a爲函數內部修改值:666
1
2
3
4
5
6
7
8
9
10
11
(2)不存在變量聲明提前,否則會報錯。

console.log(a);
let a = 1;
1
2

(3)let定義的變量,只能在塊作用域裏訪問,不能跨塊訪問,也不能跨函數訪問。

var c=11;

{
let c=12;
console.log(c);// 12
}
console.log(c);// 11
1
2
3
4
5
6
(4)不能重複定義,否則會報錯。

let a = 1;
let a = 2;
console.log(a);
1
2
3

  1. const
    (1)const定義的變量不可以修改,而且必須初始化。

const b = 2;// 正確
const b; // 錯誤,必須初始化
1
2
(2)const一般用來聲明常量,且聲明的常量是不允許改變的,爲只讀屬性,因此就要在聲明的同時賦值。

(3)const與let一樣,都是塊級作用域,只能在塊作用域裏訪問,存在暫時性死區,不存在變量聲明提前,不允許重複定義。

const b = 2;
const b = 2;
console.log(b);
1
2
3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章