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