摘要:變量提升所謂變量提升即所有聲明變量或聲明函數(shù)都會被提升到當(dāng)前函數(shù)的頂部。對于第一個中,她最終執(zhí)行的代碼實際上是這樣的所以最終打印出來的結(jié)果分別是和,這就是變量提升很簡單,不是嗎但是你要保持警惕,因為他隨時會讓你吃大虧。
變量提升
所謂 變量提升 即所有聲明變量或聲明函數(shù)都會被提升到當(dāng)前函數(shù)的頂部。
var a = 1; function log(){ console.log(a); var a = 2; console.log(2); } log(); var a; console.log(a);
大家可以猜測下上面打印到控制臺的消息會是什么?
結(jié)果分別是 : undefine,2 和 1
那么我們再看看下面這個代碼打印出來會是什么呢?
var a = 1; function log(){ console.log(a); a = 2; console.log(2); } log()
結(jié)果分別是 : 1 和 2
結(jié)合一下我們對變量提升的定義,你也許已經(jīng)明白了。對于第一個Demo中,她最終執(zhí)行的代碼實際上是這樣的
var a = 1; function log(){ var a; console.log(a); a = 2; console.log(2); } log()
所以最終打印出來的結(jié)果分別是 undefine 和 __2__,這就是變量提升很簡單,不是嗎?但是你要保持警惕,因為他隨時會讓你吃大虧。
函數(shù)的聲明方式var getName = function(){ console.log("函數(shù)表達(dá)式"); } function getName(){ console.log("函數(shù)聲明"); } getName();
還是請大家想想會打印出什么?
公布結(jié)果 : 函數(shù)表達(dá)式
這就是兩種不一樣的聲明方式帶來的結(jié)果,對于 函數(shù)聲明 JS會在優(yōu)先解析,確保所有調(diào)用這個方法的地方不會報錯,但是對于 函數(shù)表達(dá)式 只會在JS從上往下解析的時候才會,正式解析,我們可以看下面代碼會打印出什么。
console.log(getName); // undefine var getName = function(){ console.log("函數(shù)表達(dá)式"); } console.log(getName); // 會打印出getName的方法作用域
JS是沒有塊級作用域的(ES5之前),但是有函數(shù)作用域,我們看下面這兩個Demo,看看兩者的區(qū)別
function add(){ a += 10; return a; } var a = 30; console.log(add(a)+a);
function add(a){ a += 10; return a; } var a = 30; console.log(add(a)+a);
這是一道很基礎(chǔ)的問題,當(dāng)我們把兩個Demo 同時寫出來的時候,我相信很多人是可以回答出正確答案的,下面公布答案。
第一個Demo : 80 第二個Demo : 70
為什么會得到這樣的結(jié)果呢?我們看第一個Demo 函數(shù)里面的 a 實際上直接操作window下面的,也就是全局環(huán)境。但是第二個Demo操作的確實函數(shù)自己的形參,也就是自己的作用域,它的改變不會影響到全局環(huán)境的a
類JS中聲明類的方法有很多種,這里我就介紹最經(jīng)典的一種而已
function Animal(){ this.name = ""; var food = ""; var eat = function(){ console.log("eat"); } this.run = function(){ console.log("run"); } } Animal.prototype.name = "小明"; Animal.prototype.food = "穿山甲" var animal = new Animal(); console.log(animal); // 會打印出什么屬性? console.log(animal.name); // 結(jié)果會是什么? console.log(animal.food); // 那么這個呢?
首先這個涉及到了閉包的概念,關(guān)于這個問題我在這里就不詳細(xì)說了,給大家一個知乎鏈接,里面講的答案非常的簡單明了,記得要全部看完,不要只關(guān)注高分項 JavaScript 里的閉包是什么?應(yīng)用場景有哪些?,基本我要講的都在這里面了。
至于 animal.name 為什么會是 "" ,而 animal.food 是穿山甲,其實很簡單,對象對于prototype會是低優(yōu)先,先找本身存不存在name這個屬性,找不到就到prototype去找。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81534.html
摘要:的核心標(biāo)簽頭標(biāo)簽序號標(biāo)簽標(biāo)簽解釋定義關(guān)于文檔的信息定義文檔標(biāo)題定義頁面上所有鏈接的默認(rèn)地址或默認(rèn)目標(biāo)定義文檔和外部資源的關(guān)系定義關(guān)于文檔的元數(shù)據(jù)定義客戶端腳本定義文檔的樣式信息使用定義一個的模板文件新建模板文件,將模板文件放在目錄下配置一下 HTML的核心標(biāo)簽 1.HTML頭標(biāo)簽 序號 標(biāo)簽 標(biāo)簽解釋1 定義關(guān)于文檔的信息2 定義文檔標(biāo)題3 ...
摘要:在構(gòu)造函數(shù)里面初始化的數(shù)據(jù),把數(shù)據(jù)放在頁面上,點擊時候調(diào)用方法改變中的數(shù)據(jù)。是中父組件向子組件通信的方式,下面是一個簡單的例子使用組件我是顯示的數(shù)據(jù)我們定義組件時候在構(gòu)造函數(shù)中可以接收到參數(shù),并且要使用傳到的構(gòu)造方法中。 React的學(xué)習(xí)之路還要繼續(xù)走下去,最近一邊在做未完成的項目一邊學(xué)習(xí)React,項目是vue寫的,后面還需要有一個后臺管理系統(tǒng)計劃使用react完成,寒假說長也不長,...
摘要:再之后,通過專業(yè)老師的指導(dǎo),開始進(jìn)行前端知識的全面及系統(tǒng)性的學(xué)習(xí)。而這篇文章便是對這次學(xué)習(xí)的一次階段性總結(jié)。的學(xué)習(xí)并不是太難,也可以說是很容易,但千里之行,這才剛剛開始,熟練的掌握,還需要不斷的練習(xí)。 一、學(xué)習(xí)經(jīng)歷 進(jìn)入大學(xué)不久,就加入了社團(tuán),從而對前端有了一個初步的了解,之后也做過一些學(xué)校的官網(wǎng),積累了一些微小的經(jīng)驗。 到了大二的時候,學(xué)校開設(shè)了專門的html+css課程,從中也學(xué)到...
摘要:再之后,通過專業(yè)老師的指導(dǎo),開始進(jìn)行前端知識的全面及系統(tǒng)性的學(xué)習(xí)。而這篇文章便是對這次學(xué)習(xí)的一次階段性總結(jié)。的學(xué)習(xí)并不是太難,也可以說是很容易,但千里之行,這才剛剛開始,熟練的掌握,還需要不斷的練習(xí)。 一、學(xué)習(xí)經(jīng)歷 進(jìn)入大學(xué)不久,就加入了社團(tuán),從而對前端有了一個初步的了解,之后也做過一些學(xué)校的官網(wǎng),積累了一些微小的經(jīng)驗。 到了大二的時候,學(xué)校開設(shè)了專門的html+css課程,從中也學(xué)到...
摘要:雖然你可能很驚訝甚至可能懷疑是的但是這都是有語言自己的一個隱式類型轉(zhuǎn)換的套路。基本的隱式類型轉(zhuǎn)換基本類型的隱式轉(zhuǎn)換這個其實我們使用的最多例如結(jié)果返回的是而不是這就是類型的隱式轉(zhuǎn)換。 基本上所有的語言都有 隱式類型轉(zhuǎn)換 ,但是對于 弱類型語言(JS) 來說 ,隱式類型轉(zhuǎn)換會比 強(qiáng)類型語言(Java) 帶來更大的副作用,有些行為甚至是不可思議的。雖然你可能很驚訝 ,甚至可能懷疑是 JS 的...
閱讀 1911·2021-09-23 11:21
閱讀 1699·2019-08-29 17:27
閱讀 1056·2019-08-29 17:03
閱讀 724·2019-08-29 15:07
閱讀 1920·2019-08-29 11:13
閱讀 2379·2019-08-26 12:14
閱讀 919·2019-08-26 11:52
閱讀 1732·2019-08-23 17:09