摘要:而是一個更完善的,以前的是不完善的,他定義的變量是以函數(shù)為范圍,而不是正常編程語言中的以一個大括號為范圍,比如打印時仍然會打印若是一個沒接觸過的人肯定會大吃一驚,這就是一個最簡單的變量提升的例子。
從上周開始,我所在的學習小組正式開始了angular的學習,angular是全面支持es6的,所以語法上和以前的angular有了很大的不同,比如變量聲明時就拋棄了var,而選擇了let和const;記得剛開始學習js的時候,使用webstrom時用var,webstrom會在下面畫一條小綠線,表示這個用法,問題不大,但是有點問題。因為webstrom推薦使用最新的標準,之后問過學長,他說這是es6的語法,暫時不用管,防止瀏覽器不兼容。
終于,現(xiàn)在到了學習es6的時候。
const與letconst就是定義一個常量,即一個無法改變的量。
而let是一個更完善的var,以前的var是不完善的,他定義的變量是以函數(shù)為范圍,而不是正常編程語言中的以一個大括號為范圍,比如:
function() { for(var i=0;i<10;i++){ var a = "a"; } console.log(a); // a }
打印a時仍然會打印"a",若是一個沒接觸過js的人肯定會大吃一驚,這就是一個最簡單的變量提升的例子。而let就解決了這個問題。它定義的變量就是塊級的。
變量提升與函數(shù)提升上面已經(jīng)說了一個變量提升的最簡單的例子,下面介紹一下為什么:
通常JS引擎會在正式執(zhí)行之前先進行一次預編譯,在這個過程中,首先將變量聲明及函數(shù)聲明提升至當前作用域的頂端,然后進行接下來的處理
下面來說說函數(shù)提升,同樣的,讓我們先看個例子:
function hoistFunction() { foo(); // output: I am hoisted function foo() { console.log("I am hoisted"); } } hoistFunction();
函數(shù)可以在聲明之前就可以調(diào)用,這是因為引擎是把函數(shù)聲明整個地提升到了當前作用域的頂部,預編譯之后的大概代碼如下:
function hoistFunction() { function foo() { console.log("I am hoisted"); } foo(); // output: I am hoisted } hoistFunction();總結(jié)
變量提升和函數(shù)提升可以遠比上面那個例子復雜,但對我們意義并不大,畢竟對于變量已經(jīng)有了完善的let定義方法,而函數(shù)提升,在能不用的情況最好不用,畢竟他是不規(guī)范的,學習這個,只是為了以后看到相關代碼時能夠看懂,否則,看這種代碼時肯定一臉懵逼。
(另外說一句,函數(shù)提升是專門設計的,有其特殊用途,而變量提升純粹是設計語言時的失誤,但兩者都應該少用,畢竟都不規(guī)范,想要詳細了解,可以點這里)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108584.html
摘要:什么是函數(shù)作用域下的變量提升和函數(shù)提升函數(shù)作用域中也存在變量提升和函數(shù)提升,這個和全局作用域下的情況是一模一樣的,就是把作用域想成是全局的就可以了。 在js中有一部分比較難以理解,卻也是在筆試過程中很容易考的,那就是變量提升和函數(shù)提升的問題,這篇文章我會就變量提升和函數(shù)提升的問題拓展一下有關js函數(shù)的知識點,包括作用域的問題,后面還會有一些小練習來判斷自己是否真的搞懂了。 作用域 在j...
摘要:變量的作用域無非就是兩種全局變量和局部變量。其中內(nèi)部函數(shù)中可以訪問外部函數(shù)的變量,是因為內(nèi)部函數(shù)的作用域鏈中包含了外部函數(shù)的作用域也可以理解為內(nèi)部函數(shù)的作用范圍輻射到了外部函數(shù)的作用范圍另一方面,在函數(shù)外部自然無法讀取函數(shù)內(nèi)的局部變量。 以前學習的時候,了解過變量提升和閉包,但是沒有深入了解,網(wǎng)上查了資料,這里記錄下,只供參考。部分內(nèi)容引用: https://www.cnblogs.c...
摘要:代碼在執(zhí)行之前會先全局中變量提升函數(shù)聲明。函數(shù)的執(zhí)行上下文,也就是在這個函數(shù)范圍內(nèi)找到函數(shù)執(zhí)行上下文中函數(shù)范圍內(nèi),所有用聲明的變量。函數(shù)執(zhí)行時,按照執(zhí)行位置查找變量作用域只會向上查找。下一回變量作用域與閉包 上一章:JS的數(shù)據(jù)類型 傳送門:https://segmentfault.com/a/11... 好!話不多少,我們就開始吧。對變量提升和函數(shù)聲明的理解,能讓你更清楚容易的理解,...
摘要:代碼在執(zhí)行之前會先全局中變量提升函數(shù)聲明。函數(shù)的執(zhí)行上下文,也就是在這個函數(shù)范圍內(nèi)找到函數(shù)執(zhí)行上下文中函數(shù)范圍內(nèi),所有用聲明的變量。函數(shù)執(zhí)行時,按照執(zhí)行位置查找變量作用域只會向上查找。下一回變量作用域與閉包 上一章:JS的數(shù)據(jù)類型 傳送門:https://segmentfault.com/a/11... 好!話不多少,我們就開始吧。對變量提升和函數(shù)聲明的理解,能讓你更清楚容易的理解,...
摘要:代碼在執(zhí)行之前會先全局中變量提升函數(shù)聲明。函數(shù)的執(zhí)行上下文,也就是在這個函數(shù)范圍內(nèi)找到函數(shù)執(zhí)行上下文中函數(shù)范圍內(nèi),所有用聲明的變量。函數(shù)執(zhí)行時,按照執(zhí)行位置查找變量作用域只會向上查找。下一回變量作用域與閉包 上一章:JS的數(shù)據(jù)類型 傳送門:https://segmentfault.com/a/11... 好!話不多少,我們就開始吧。對變量提升和函數(shù)聲明的理解,能讓你更清楚容易的理解,...
閱讀 1579·2021-10-18 13:35
閱讀 2359·2021-10-09 09:44
閱讀 812·2021-10-08 10:05
閱讀 2706·2021-09-26 09:47
閱讀 3560·2021-09-22 15:22
閱讀 427·2019-08-29 12:24
閱讀 1992·2019-08-29 11:06
閱讀 2852·2019-08-26 12:23