本篇文章帶給大家的內容是關於javascript變數提升的詳細介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
簡介
「變數提升」表示變數和函數的宣告會在物理層面移動到程式碼的最前面,但這麼說並不準確。
實際上變數和函數宣告在程式碼裡的位置是不會動的,而是在編譯階段被放入記憶體中。
宣告變數的方法
var、let、const
不用以上關鍵字直接賦值的變數會掛載與windows環境下;
let a=9 const a=1 var a=6 c=5
宣告函數的方法
javascript中宣告函數的方法有兩種:函數宣告式和函數表達式。
//函数声明 function say(){ console.log('hello') } //函数表达式 var say=function (){ console.log('hello') }
提升的好處
JavaScript 在執行任何程式碼片段之前,將函數宣告放入記憶體中的優點之一是,這允許你可以在宣告函數之前使用一個函數。
/*** 正确的方式:先声明函数,再调用函数 (最佳实践)*/ function catName(name) { console.log("我的猫名叫 " + name); } catName("Tigger"); /*以上代码的执行结果是: "我的猫名叫 Tigger"*/ /*** 不推荐的方式:先调用函数,再声明函数 */ catName("Chloe"); function catName(name) { console.log("我的猫名叫 " + name); } /*代码执行的结果是: "我的猫名叫 Chloe"*/
提升規則
var 宣告的變量,提升時只聲明,不賦值,預設為undefined;不用關鍵字直接賦值的變數不存在提升(demo1)
#函數提升會連帶函數體一起提升,不執行;(deom2)
預先解析的順序是從上到下;(demo4)
函數的優先權高於變量,函數宣告提前到目前作用域最頂端;(deom3)
變數重名,提升時不會重複定義;在執行階段後面賦值的會覆寫上面的賦值;(demo4)
#函數重名,提升時後面的會覆寫前面;(demo5)
函數和變數重名,提升函數,不會重複定義,變數不會覆蓋函數;在執行階段後面賦值的會覆寫上面的賦值;(demo8)
用函數表達式宣告函數,會依照宣告變數規則提升;(deom6)
函數執行時,函數內部的變數宣告和函數宣告也依照以上規則進行提升;(deom7)
let、const不存在提升;(demo9、demo10)
/**demo1**/ console.log('a=',a) //a=undefined console.log('b=',b) // Uncaught ReferenceError: b is not defined var a=1 b=6 /**deom2**/ console.log('a=',a) // a=function a() {console.log("func a()")} function a() { console.log("func a()") } /**deom3**/ console.log('a=',a) // a=function a() {console.log("fun a")} var a=3 var a=4 function a(){ console.log("fun a") } var a=5 var a=6 console.log("a=",a) // a=6 /**deom4**/ console.log('a=',a) // a=undefined var a =2 console.log('a=',a) // var a =3 var a =4 console.log('a=',a) // a=4 console.log('b=',b) //b= undefined var b='b1' /**deom5**/ console.log('a=',a) // a=function a() {console.log("a2")} function a(){ console.log("a1") } function a(){ console.log("a2") } console.log('a=',a) // a=function a() {console.log("a2")} /**deom6**/ console.log('a=',a) // a=undefined var a=function(){console.log('a1')} var a=3 var a=4 var a=5 console.log(a) var a=function(){console.log('a2')} console.log('a=',a) // a= ƒ (){console.log('a2')} /**deom7**/ console.log('b=',b) var a=3 function b(i){ console.log('a=',a) var a=4 function a(){ console.log('fun a') } console.log('a=',a) } b() /**demo8**/ console.log('a=',a) //a= function a(){ console.log('fun a')} var a=2 function a(){ console.log('fun a') } console.log('a=',a) // a=2 var a=3 var a=4 var a=5 console.log('a=',a) // a=5 /**demo9**/ console.log('a=',a) //Uncaught ReferenceError: a is not defined let a=4 /****/ <!--demo10--> console.log('b=',b) // Uncaught ReferenceError: b is not defined const b=5
以上是javascript變數提升的詳細介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!