let和const

nodejs是javascript的運行環(huán)境,可以使用node來測試。

1.定義(聲明)變量

es5和es6的區(qū)別:

js版本 作用域
es5 全局作用域和函數(shù)作用域
es6 塊級作用域
定義(聲明)變量 定義的變量是否提升 在同一個作用域內(nèi),是否可以重復定義 變量定義后,是否可以修改
var
let
const 否 除外 object array修改

1. 作用域

//常見的塊級作用域
if(){}

for(){}

while(){}

  • es5 --->for
//例1
if (true) {
    var a = 20;
}

console.log(a)

//例2
for(var i=0;i<10;i++){
    //var定義的i是全局變量
}

console.log(i)  //10

//例3

var arr = [];

for (var i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i)
    }
}

arr[1]() //10
arr[2]() //10
  • es6 ---> for
//例1
if (true) {
    let a = 20;
}
console.log(a) //a is not defined

//例2
for(let i = 0;i<10;i++){
    //let定義的i是局部的變量
}

console.log(i)  //i is not defined

//例3

let arr = [];

for (let i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i)
    }
}
arr[1]() //1
arr[2]() //2

2. 是否有變量提升

  • es5 ---> var有變量提升
var a = 20;
function fn(){
    alert(a)    //undefined
    var a = 5;  
}
fn()

//相當于下面代碼

function fn(){
    var a;      //變量提升
    alert(a)
    a = 5;
}

  • es6 ---> let沒有變量提升
let a = 20;
function fn(){
    alert(a);   //a is not defined
    let a = 5;
}

3.是否可以重復定義

  • es5 ---> 在同一作用域內(nèi),var可以重復定義
var a = 10;

//....

var a = 5;
console.log(a); //5
  • es6 ---> 在同一作用域內(nèi),let不可以重復定義
//例1
let a = 10;

//.....
let a = 5;
console.log(a);
//Uncaught SyntaxError: Identifier 'a' has already been declared

//例2

{
    let a = 10; 
    {
        let a = 5;
        console.log(a)
    }
    console.log(a)
}

//例3

for (let a = 1; a < 10; a++) { //父級作用域
    let a = 'abc'; //子級作用域
    console.log(a);
}

注let:
  • let沒有變量提升,即在代碼塊內(nèi),只要在let定義之前使用變量就會報錯。
  • 在同一個作用域內(nèi),不能重復定義變量
  • let聲明的變量不能成為window的屬性
  • 暫時性死區(qū)

3.const定義常量

const注:const在定義時必須有值,不能后賦值(修改),經(jīng)常用于定義配置文件

const arr = ['apple', 'banner'];

// arr = false;
// console.log(arr) //Uncaught TypeError: Assignment to constant variable.

arr.push("orange"); //const定義的對象可以修改,因為對象是引用類型的。

console.log(arr);

基本類型存儲在棧內(nèi)存中


image

<h6>引用類型同時存儲在堆內(nèi)存和棧內(nèi)存中</h6>


image

例:

image
總結(jié):
  • 定義變量使用let,不要使用var
  • const在定義時必須有值,不能后賦值(修改),經(jīng)常用于定義配置文件。例如:node引用的包,可以使用const
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容