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