js中變量名提升和函數名提升
阿新 • • 發佈:2017-09-15
cnblogs 約數 abc cti 但是 定義 一個 開始 bsp
首先,js中變量沒有塊級作用域,但是有函數作用域,即只有函數可以約數變量的作用域。
並且,函數的實質也是一個變量,所以可以改變它的值,即賦值。所以變量名提升和函數名提升非常相像。
1.變量名的提升發生在函數內部。看下面的例子。說明:第一個因為彈出undefined,相當於在上面定義了var num;因為函數內部,定義了var num=20;就相當於在一開始定義了var num;這就是變量名的提升。
var num = 10; function func() { alert(num); //undefined var num = 20; alert(num);//20 } func(); alert(num) //10
相當於:
var num = 10; function func() { var num; alert(num); //undefined var num = 20; alert(num); //20 } func(); alert(num) //10
如果沒有var
var num = 10; function func() { alert(num); //10 num = 20; alert(num);//20 } func(); alert(num) //20
函數嵌套道理一樣
var num = 10; function func() { alert(num); //undefined num = 20; function func1() { alert(num); //undefined var num = 40; alert(num) //30 } func1() alert(num);//20 } func(); alert(num) //10
2.函數名提升發生在lambda函數上,即匿名函數。和變量名提升一個道理。
var func = function () { alert("abc") }; function func1() { func(); //func is not a function var func = function () { alert("123") }; func() } func1();
省去var
var func = function () { alert("abc") }; function func1() { func(); //abc func = function () { alert("123") }; func()//123 } func1();
改變函數,不使用匿名函數
var func = function () { alert("abc") }; function func1() { func(); //123 function func() { alert("123") }; func()//123 } func1();
js中變量名提升和函數名提升