最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中var與let的區(qū)別

 更新時間:2021年12月08日 11:45:57   作者:聽寒以南  
這篇文章主要介紹了JavaScript中var與let的區(qū)別,var是JavaScript剛出現(xiàn)時就存在的變量聲明關鍵字,而let作為ES6才出現(xiàn)的變量聲明關鍵字,無疑兩者之間存在著很大的區(qū)別,下面來看看兩者之間到底存在什么

前言:

varJavaScript剛出現(xiàn)時就存在的變量聲明關鍵字,而let作為ES6才出現(xiàn)的變量聲明關鍵字,無疑兩者之間存在著很大的區(qū)別。那么具體有哪些區(qū)別呢?

1.作用域表現(xiàn)形式不同

var是函數(shù)作用域,let是塊級作用域

{
  var monkey='熏悟空';
  let pig='豬扒蓋';    
}
console.log(monkey); //輸出undefined
console.log(pig); //報錯:pig is not deined


由上面代碼可見,let聲明的變量只在其所在的代碼塊有效,在代碼塊外部無效無法訪問,而var聲明的變量在該代碼塊所在的函數(shù)作用域內(nèi)都有效。

2.是否變量提升的區(qū)別

var聲明的變量會進行變量提升,let聲明的變量不會進行變量提升。

console.log(monkey); //undefined
var monkey='熏悟空';

console.log(pig); //報錯:pig is not defined
let pig='豬扒蓋'; 


同樣的邏輯,為什么var聲明的變量在它聲明之前調(diào)用會顯示未定義,而let聲明的變量在聲明之前調(diào)用會拋出異常呢,這就是兩者在變量提升上的區(qū)別,var聲明的變量存在變量提升,let聲明的變量不存在變量提升。

那么什么叫變量提升呢,我這里不做概念性的描述,我只說我個人的理解,就是以上代碼實際上相當于如下:

var monkey;

console.log(monkey); //undefined
monkey='熏悟空';

console.log(pig); //報錯:pig is not defined
let pig='豬扒蓋'; 

看見區(qū)別了嗎,var聲明的變量會將聲明的變量提取到作用域的最上面進行定義但不賦值,賦值操作還是在你的代碼處,所以你在調(diào)用var聲明的變量時就是一個已經(jīng)聲明但是并未定義值的變量,所以調(diào)用結(jié)果就是undefined,這就是所謂的變量提升。而let定義的變量不存在這種變量提升。

3.暫時性死區(qū)上的區(qū)別

暫時性死區(qū):如果在某一作用域內(nèi)let了一個變量,如果外部作用域中有相同名稱的變量,那么就算在作用域內(nèi)進行了更改,也不會影響到外部作用域

具體表現(xiàn)如下:

for(var i=0;i<5;i++){
    setTimeout(function(){
        console.log(i)
    },1000)
}
for(let i=0;i<5;i++){
  setTimeout(function(){
     console.log(i)          
  },1000)  
}


請問這兩處代碼的運行結(jié)果分別是什么?

第一處代碼運行完畢的結(jié)果是1s后順序打印5個5;第二處代碼運行完畢的結(jié)果是1s后順序打印0,1,2,3,4。

請問為什么會存在這種區(qū)別?

因為第一處代碼的變量i由var關鍵字聲明,不存在關鍵性死區(qū),即你在1s后setTimeout中訪問到的變量i是全局上下文中for循環(huán)運行完畢之后的i,所以打印的結(jié)果全是5;

而第二處代碼的變量i由let關鍵字聲明,產(chǎn)生了關鍵性死區(qū),存在setTimeout中的i變量是你當時存儲時的i的值,這個存儲區(qū)間的i不會因為外面有相同的i變量且賦了不同的值而改變,他依舊是之前存儲進去的值,這就是暫時性死區(qū)的表現(xiàn),也是為什么第二處代碼運行完畢是順序打印0,1,2,3,4的原因。

4.在同一個上下文中var可以重復聲明,let不行

let monkey='熏悟空';
let monkey='逼馬吻'; //報錯:Identifier 'a' has already been declared
var pig='豬扒蓋';
var pig='豬肛裂';  //正常訪問,變量pig的值被替換

到此這篇關于JavaScript中var與let的區(qū)別的文章就介紹到這了,更多相關JavaScript中var與let內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JavaScript檢測是否開啟了控制臺(F12調(diào)試工具)

    JavaScript檢測是否開啟了控制臺(F12調(diào)試工具)

    通過js來檢測開發(fā)者工具是否打開,防止別人惡意調(diào)試我們的代碼,最近我發(fā)現(xiàn)還是有蠻多人去瀏覽那篇文章,所以這里再放出一段代碼,算是個升級版吧
    2020-10-10
  • js字符串中空格和換行符(\r,\s,\n,\r\n)淺析

    js字符串中空格和換行符(\r,\s,\n,\r\n)淺析

    我們在使用字符串時經(jīng)常會遇到換行問題,下面這篇文章主要給大家介紹了關于js字符串中空格和換行符(\r,\s,\n,\r\n)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • JS實現(xiàn)彈出居中的模式窗口示例

    JS實現(xiàn)彈出居中的模式窗口示例

    這篇文章主要介紹了JS實現(xiàn)彈出居中的模式窗口,涉及javascript模式窗口及頁面元素的動態(tài)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Javascript實現(xiàn)div層漸隱效果的方法

    Javascript實現(xiàn)div層漸隱效果的方法

    這篇文章主要介紹了Javascript實現(xiàn)div層漸隱效果的方法,涉及javascript操作頁面元素與樣式變化的相關技巧,需要的朋友可以參考下
    2015-05-05
  • 微信小程序webView嵌入H5的方法實例

    微信小程序webView嵌入H5的方法實例

    web-view是小程序提供的一個可以直連h5頁面的組件,只要傳遞一個h5頁面的地址,就可以在小程序里直接打開預覽該h5頁面,這篇文章主要給大家介紹了微信小程序webView嵌入H5的相關資料,需要的朋友可以參考下
    2021-07-07
  • Bootstrap table 定制提示語的加載過程

    Bootstrap table 定制提示語的加載過程

    bootstrap-table是在bootstrap-table的基礎上寫出來的,專門用于顯示數(shù)據(jù)的表格插件。這篇文章主要介紹了Bootstrap table 定制提示語,需要的朋友可以參考下
    2017-02-02
  • 第三章之Bootstrap 表格與按鈕功能

    第三章之Bootstrap 表格與按鈕功能

    Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發(fā)更加快捷。本文給大家介紹Bootstrap 表格與按鈕功能,感興趣的朋友參考下吧
    2016-04-04
  • JavaScript實現(xiàn)Date()日期格式化的3種常用方法

    JavaScript實現(xiàn)Date()日期格式化的3種常用方法

    Date()日期對象是一個構(gòu)造函數(shù),必須使用new來調(diào)用創(chuàng)建我們的日期對象,下面這篇文章主要給大家介紹了關于JavaScript實現(xiàn)Date()日期格式化的3種常用方法,需要的朋友可以參考下
    2024-05-05
  • JS獲取網(wǎng)頁屬性包括寬、高等等

    JS獲取網(wǎng)頁屬性包括寬、高等等

    這篇文章主要介紹了JS獲取網(wǎng)頁屬性包括寬、高等等,需要的朋友可以參考下
    2014-04-04
  • antDesign 自定義分頁樣式的實現(xiàn)代碼

    antDesign 自定義分頁樣式的實現(xiàn)代碼

    這篇文章主要介紹了antDesign 自定義分頁樣式的實現(xiàn)代碼,這里用到了自定義指令,如果大家用不到可以按照自己的實際效果開發(fā),本文通過實例代碼給大家詳細講解,需要的朋友可以參考下
    2022-10-10

最新評論

嵩明县| 汝城县| 开远市| 安化县| 历史| 三门峡市| 东丰县| 罗甸县| 平泉县| 武义县| 新蔡县| 水城县| 华亭县| 南通市| 新田县| 临澧县| 驻马店市| 沙雅县| 抚顺县| 建德市| 莆田市| 英德市| 泸溪县| 鄢陵县| 安岳县| 锡林浩特市| 庆城县| 隆昌县| 武平县| 屏南县| 白城市| 齐齐哈尔市| 化德县| 潼关县| 天柱县| 得荣县| 嵊泗县| 曲麻莱县| 自治县| 永福县| 伊春市|