国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

var let const 區別

Ververica / 3242人閱讀

摘要:區別標簽空格分隔規范新增了兩種變量聲明方式,雖然在項目中也經常用到和但是和到底有什么區別,今天做下總結。不允許重復聲明不允許在相同作用域內,重復聲明同一個變量。

var let const 區別

標簽(空格分隔): ES6

ES6規范新增了let、const兩種變量聲明方式,雖然在項目中也經常用到let和const但是和var到底有什么區別,今天做下總結。

1、let 聲明的變量只在它所在的代碼塊有效;
for (let i = 0; i < 10; i++) {
  console.log(i);
}
console.log("aaa");
console.log(i); // i is not defined

上面代碼中,計數器i只在for循環體內有效,在循環體外引用就會報錯。如下var代碼:

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

變量i是var聲明的,在全局范圍內都有效,所以每一次循環,新的i值都會覆蓋舊值,導致最后輸出的是最后一輪i的值。
但是如果使用let,聲明的變量僅在塊級作用域內有效,最后輸出的是6. 如下:

var b = [];
for (let j = 0; j < 10; j++) {
    b[j] = function() {
        console.log(j);
    }
}
b[6](); // 6
2、let不存在變量提升

let 不像var 那樣會發生 ‘變量提升’ 現象,因此,變量需要先聲明然后再使用,否則報錯;

// var 的情況
console.log(foo);  // undefined
var foo = 2;

// let的情況;
console.log(bar);  // 報錯
let bar = 2;
3、暫時性死區

快級作用域內存在let命令,它所聲明的變量就綁定在這個區域,不再受外部影響;如下代碼:

var tmp = 123;
if (true) {
    tmp = "abc";
    let tmp;
    console.log(tmp); // tmp is not defined
}

上面代碼定于全局變量tmp,但是在快級作用域內let又聲明了一個局部變量tmp,導致綁定了這個快級作用域;因此打印出tmp會報錯。

4、不允許重復聲明

let 不允許在相同作用域內,重復聲明同一個變量。如下代碼排錯

function a() {
    let a = 10;
    var a = 1;
    console.log(a);
}
a();
function a() {
    let a1 = 10;
    let a1 = 1;
    console.log(a1);
}
a();

也不能在函數內部重新聲明參數。

function func1(arg) {
    let arg; // 報錯
}
function func2(arg) {
    {
        let arg; // 不報錯
    }
}

ES6的塊級作用域

function f1() {
    let n = 5;
    if (true) {
        let n = 10;
    }
    console.log(n); // 5
} 
f1()

上面的代碼有2個代碼塊,都聲明了變量n,運行后輸出5,說明了外層代碼塊不受內層代碼塊的影響,如果使用了變量var,那么輸出的就是10;

5、const命令

const 聲明一個只讀的常量,一旦聲明,常量的值就不允許改變。
如下代碼:

const a = 1; 
a = 2; 
console.log(a);  //報錯

也就是說 const 一旦聲明了變量,就必須初始化,不能留到以后賦值。如果使用const聲明一個變量,但是不賦值,也會報錯;如下代碼:

const aa;  // 報錯

const的作用域與let命令相同;只在聲明所在的塊級作用域內有效。

if (true) {
    const aa = 1;
} 
console.log(aa);  // 報錯

不可重復聲明 (和let一樣)

var message = "Hello!";
let age = 25;
// 以下兩行都會報錯
const message = "Goodbye!";
const age = 30;

但是對于復合類型的變量,比如數組,存儲的是一個地址,不可改變的是這個地址,即不能把一個地址指向另一個地址,但是對象本身是可變的,比如可以給它添加新的屬性,如下代碼:

const a33 = [];
a33.push("Hello"); // 可執行
a33.length = 0;    // 可執行
a33 = ["55"]  // 報錯

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97248.html

相關文章

  • javascript中varletconst聲明的區別

    摘要:聲明的變量存在變量提升,聲明的變量不存在變量提升。聲明的變量允許重新賦值,聲明的變量不允許重新賦值。注意跨腳本聲明重復變量也會報錯。中出現的任何元素在聲明中出現,語法錯誤。中的是如此的怪異。對中的聲明進行實例化。 我在上一篇文章javascript中詞法環境、領域、執行上下文以及作業詳解中的最后稍微提到了有關var、let、const聲明的區別,在本篇中我會重點來分析它們之間到底有什么...

    Yujiaao 評論0 收藏0
  • varlet/const區別

    showImg(https://segmentfault.com/img/remote/1460000017757580); let和const是 ES6 新增的命令,用于聲明變量,這兩個命令跟 ES5 的var有許多不同,并且let和const也有一些細微的不同,再認真閱讀了阮一峰老師的文檔后,發現還是有一些不知道的細節... 博客、前端積累文檔、公眾號、GitHub 內容: var和let...

    SHERlocked93 評論0 收藏0
  • 總結下varletconst區別

    摘要:前言和的區別是老生常談,看到網上一些文章的總結,有的不太全面,甚至有的描述不太準確,在這里盡量全面的總結下這三者的區別。最后以上大概是總結后的內容,看來,還是多用吧。 前言 var 和 let 的區別是老生常談,看到網上一些文章的總結,有的不太全面,甚至有的描述不太準確,在這里盡量全面的總結下這三者的區別。 let 是 ES6新增的變量類型,用來代替 var 的一些缺陷,跟 var...

    pingink 評論0 收藏0
  • js中varletconst區別

    摘要:中的區別主要內容是中三種定義變量的方式,,的區別。定義的變量可以修改,如果不初始化會輸出,不會報錯。正確錯誤,必須初始化函數外定義有輸出值函數外修改定義無法輸出是常量,不可改變,一般大寫,也是塊級作用域。。。 js中var、let、const的區別 主要內容是:js中三種定義變量的方式const, var, let的區別。 var定義的變量可以修改,如果不初始化會輸出undefined...

    Yuqi 評論0 收藏0
  • es6中 var let const區別

    摘要:我認為這樣是可行的主要是通過設置變量的可寫屬性為報錯不報錯通過以上兩個例子發現這種實現應該是可以的 由一道面試題引發的思考~~如何用es5實現es6中類似const的效果? var:有變量提升,提升到當前作用域的最前 let: (1)let不會有變量提升:且let申明的變量在塊級作用域中存在暫時性死區 (暫時性死區:在塊級作用域中,從塊級的頂部到變量申明之前,...

    劉永祥 評論0 收藏0

發表評論

0條評論

Ververica

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<