摘要:很多初學者弄不清變量提升和函數提升,整理寫幾個例子,分析一下,你很快搞明白怎么分析。精華放在最上面,兩個最基本的原則函數聲明優先先聲明,后賦值,聲明和賦值是分開的。
很多初學者弄不清變量提升和函數提升,整理寫幾個例子,分析一下,你很快搞明白怎么分析。
精華放在最上面,兩個最基本的原則:
函數聲明優先
先聲明,后賦值,聲明和賦值是分開的。
讓我們看幾個例子并解釋下
先看這個例子:
var test=0 var test function test(){ console.log(1) } console.log(test)
結果輸出 0
分析一下: 顯然程序中變量test有3次聲明,誰先呢? 記住一個原則,函數聲明優先,所以優先的是 function test(), 那么執行順序按邏輯上可以換成
function test(){ console.log(1) } var test=0 var test
然后程序中聲明了又一次test ,但其實test已被聲明過了,所以實際上第二句只是賦值,將0賦值給test。第三句不起效果,因為聲明過了嘛,所以不是undefined。
再看個例子:
test = 1 function show(){ console.log(test) var test var test = 0 console.log(test) } console.log(test) var test = 3 show() console.log(test)
按第二原則,我們發現程序中有一句 var test= 3, 這個地方聲明過test,我們整體下程序邏輯,變成
var test test = 1 function show(){ console.log(test) var test var test = 0 console.log(test) } console.log(test) test = 3 show() console.log(test)
你可能會說搞不清show() 里發生了什么,解釋一下,同樣套那兩條原則中的第二條,先聲明,后賦值,show()整理為
function show(){ var test console.log(test) test = 0 console.log(test) }
啊哈,so明顯,show()中的第一次輸出應該是undefined,第二次輸出是0
我們把整個程序整理下:
var test test = 1 function show(){ var test console.log(test) //undefined test = 0 console.log(test) //0 } console.log(test) //1 test = 3 show() console.log(test) //3
輸出我已經注釋上了,很容易,對吧?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/92954.html
摘要:對于大多數開發者來說,變量提升可以說是一個非常常見的問題,但是可能很多人對其不是特別的了解。如果說擁有和一樣的變量提升效果的話,那么應該是輸出。而和它們的變量提升的效果是一樣的,也都存在著臨死性死區的概念。 對于大多數js開發者來說,變量提升可以說是一個非常常見的問題,但是可能很多人對其不是特別的了解。所以在此,我想來講一講。 先從一個簡單的例子來入門: a = 2; var a; ...
摘要:作用域是代碼的不同部分在運行期間的可見性。大多數開發者想當然地理解作用域,但毫無疑問,有它自己的說明。變量可能是全局作用域的,或者是方法作用域的。總而言之,不要重復聲明變量,使用良好命名,盡力避免在聲明前調用和執行任何東西。 原文鏈接:https://hackernoon.com/unders... 什么是作用域? 就像JavaScript中的其他東西一樣,作用域并無特別之處。盡管大多...
摘要:如下代碼輸出的結果是代碼執行分為兩個大步預解析的過程代碼的執行過程預解析與變量聲明提升程序在執行過程中,會先將代碼讀取到內存中檢查,會將所有的聲明在此進行標記,所謂的標記就是讓解析器知道有這個名字,后面在使用名字的時候不會出現未定義的錯誤。 showImg(https://segmentfault.com/img/remote/1460000012922850); 如下代碼輸出的結果是...
摘要:變量的作用域無非就是兩種全局變量和局部變量。其中內部函數中可以訪問外部函數的變量,是因為內部函數的作用域鏈中包含了外部函數的作用域也可以理解為內部函數的作用范圍輻射到了外部函數的作用范圍另一方面,在函數外部自然無法讀取函數內的局部變量。 以前學習的時候,了解過變量提升和閉包,但是沒有深入了解,網上查了資料,這里記錄下,只供參考。部分內容引用: https://www.cnblogs.c...
摘要:為啥因為變量提升,變量的聲明被提升到當前作用域的頂部了。也就是可以想象成這樣此外,還有函數提升,和變量提升類似和被提升了,所以不會報錯。開始處理函數聲明,再次提醒,函數表達式不會被處理。 變量提升 & 函數提升 function f() { console.log(a); // ? var a = 1; } f(); 簡單簡單,打印結果是 undefined。為啥?因為...
閱讀 2332·2021-10-08 10:04
閱讀 1105·2021-09-03 10:40
閱讀 1158·2019-08-30 15:53
閱讀 3315·2019-08-30 13:13
閱讀 2932·2019-08-30 12:55
閱讀 2286·2019-08-29 13:21
閱讀 1355·2019-08-26 12:12
閱讀 2761·2019-08-26 10:37