欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6深入理解之“l(fā)et”能替代”var“嗎?

 更新時間:2017年06月28日 10:06:27   投稿:daisy  
這篇文章主要介紹了關于ES6之"let"能替代"var"的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。

前言

我已經使用ES2015(ES6)的語法編寫JavaScript程序很久了,并且喜歡上它提供的新特性帶來的優(yōu)雅和簡潔。我最習慣的就是不再使用var,而是let/const。我想當然的以為let僅僅是var的替代者,而事實上let還為我們提供了更加精細的作用域。

我大多數時候使用的變量都是用const來聲明,因為如果嘗試對使用const聲明的變量進行修改,將會報錯。這可以避免不小心將一個不該修改的常量值修改。但是,我們還是需要可以聲明可以被修改的變量,比如在循環(huán)里面的計數器,我們需要不斷地對改變了加1??墒菫槭裁次覀兪褂胠et而不是var呢?

最簡單的答案就是let提供塊作用域(block-scoping),這會比var提供的以函數為作用域有更加精細化的控制。為了便于理解,我來用一個經典的前端工程師面試的問題來描述兩者的區(qū)別。

問題: 在下面的例子中,請說出控制臺的打印結果。

var callbacks = [];
(function() {
 for (var i = 0; i < 5; i++) {
 callbacks.push( function() { return i; } );
 }
})();
console.log(callbacks.map( function(cb) { return cb(); } ));

我們將for循環(huán)執(zhí)行五次,每次將一個函數push到callbacks數組中。最后callbacks數組里面的每一個函數的執(zhí)行結果打印出來。

一個新手工程師經過深思熟慮可能會回答[0, 1 , 2, 3, 4], 然而卻掉入了JavaScript的”hoisting陷阱”。

只有當你理解了hoisting, 才能給出正確的答案[5, 5, 5, 5, 5]。

var callbacks = [];
(function() {
 var i;
 for (i = 0; i < 5; i++) {
 callbacks.push( function() { return i; } );
 }
})();
console.log(callbacks.map( function(cb) { return cb(); } ));

注意:上面的代碼,JavaScript將變量提升到函數定義的頂部,經過整個for循環(huán),callbacks里面存儲的5個函數指向的同一個變量i的值已經是5。所以最終打印出來的值都為5。

在以前要通過各種奇淫技巧來解決這個問題,并成功返回[0, 1, 2, 3, 4], 現在我們有了let,就可以很簡單解決問題:

var callbacks = [];
(function() {
 for (let i = 0; i < 5; i++) {
 callbacks.push( function() { return i; } );
 }
})();
console.log(callbacks.map( function(cb) { return cb(); } ));

因為let擁有塊作用域,所以使用let聲明的變量i不會被提升到函數頂部,i的作用域在for循環(huán), 就會每次循環(huán)有獨立的值。

那我們是不是應該不要使用var了呢?如果你想要一個變量擁有函數作用域,var還是很有用的。

讀者提到的兩個問題:

1、const聲明的變量不是完全不可更改。比如:

const myNotQuiteImmutableObject = {
 thisCanBeChanged: "not immutable"
};
myNotQuiteImmutableObject.thisCanBeChanged = "see I changed it.";

但是,使用const聲明可以阻止一些基本的更改,比如:

const immutableString = "you can't change me";
immutableString = "D'OH!"; // error

如果你想要完全的不可更改,可以使用Facebook提供的Immutable庫。

2、老版本的瀏覽器不支持let。不僅如此,而且有些最新的瀏覽器也還沒有支持let。我們可以使用Babel來避免這個問題,Babel允許你使用所有最新的JavaScript功能,然后將其翻譯到甚至IE8都能支持的代碼。

原文: Why You Shouldn't Use ‘var' Anymore

譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • 簡述JS中forEach()、map()、every()、some()和filter()的用法

    簡述JS中forEach()、map()、every()、some()和filter()的用法

    JS中常常需要對數組進行遍歷、迭代操作,而我們常用的就是for語句對數組進行迭代,下面這篇文章主要給大家介紹了關于JS中forEach()、map()、every()、some()和filter()的用法,需要的朋友可以參考下
    2022-05-05
  • 實例講解DataTables固定表格寬度(設置橫向滾動條)

    實例講解DataTables固定表格寬度(設置橫向滾動條)

    下面小編就為大家?guī)硪黄獙嵗v解DataTables固定表格寬度(設置橫向滾動條)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • JS 強制設為首頁的代碼

    JS 強制設為首頁的代碼

    把網站設置為瀏覽器的首頁是我們做網站時經常加到網站頂部的功能!下面這段代碼是強制設置為首頁的代碼!最好別用??!呵呵!
    2009-01-01
  • asp.net中System.Timers.Timer的使用方法

    asp.net中System.Timers.Timer的使用方法

    asp.net中System.Timers.Timer的使用方法,需要的朋友可以參考一下
    2013-03-03
  • JavaScript實現簡易QQ聊天界面

    JavaScript實現簡易QQ聊天界面

    這篇文章主要為大家詳細介紹了JavaScript實現簡易QQ聊天界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript阻止瀏覽器返回按鈕的方法

    JavaScript阻止瀏覽器返回按鈕的方法

    這篇文章主要介紹了JavaScript阻止瀏覽器返回按鈕的方法,可實現通過javascript禁用掉返回按鈕的功能,需要的朋友可以參考下
    2015-03-03
  • 一文解析ChatGPT?之?Fetch?請求

    一文解析ChatGPT?之?Fetch?請求

    這篇文章主要為大家介紹了ChatGPT?之?Fetch請求的內容解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • JavaScript取得鍵盤按下方向鍵是哪個的方法

    JavaScript取得鍵盤按下方向鍵是哪個的方法

    這篇文章主要介紹了JavaScript取得鍵盤按下方向鍵是哪個的方法,涉及javascript針對鍵盤按鍵事件的判定技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • js實現雙擊圖片放大單擊縮小的方法

    js實現雙擊圖片放大單擊縮小的方法

    這篇文章主要介紹了js實現雙擊圖片放大單擊縮小的方法,涉及js操作圖片及onclick與ondblclick事件的使用技巧,需要的朋友可以參考下
    2015-02-02
  • 基于javascript顯示當前時間以及倒計時功能

    基于javascript顯示當前時間以及倒計時功能

    這篇文章主要為大家詳細介紹了基于javascript顯示當前時間以及倒計時功能的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論