定義: var宣告的變數,js在執行時會將其宣告提公升到它所在作用域的頂端去執行,到我們**所在的位置來賦值。
console.log(a);//undefinded,因為一開始執行了var a
var a = 123
console.log(v1);//undefined
var v1 = 100;
function func()
func();
console.log(v1);//100
function fun1()
console.log(a);//2,第五行的a依然可以影響到括號外的輸出
}fun1();
函式也有提公升現象,並且有一些需要注意的點
定義:對於宣告式函式,js在執行時會將函式的整個**塊提公升到它所在的作用域的最開始執行。
//函式宣告式
function func () {}
//函式字面量式
var a = function () {}
func();//1
var func;
console.log(func); // func是函式,並且裡面是1
function func()
func = function()
func();//2,此時的func依然是函式,但是值已經改變
func = 2;
console.log(func); // 2,func不再是函式
func();//uncaught typeerror func is not a function
foo();
//低版本:2 猜測因為兩次宣告同乙個函式,後宣告的會替換先宣告的(注意同名函式可以覆蓋函式的宣告,但是同名變數無論如何也不能覆蓋函式的宣告,因為函式優先)
//高版本: uncaught typeerror: foo is not a function
var a = true;
if(a)
}else
}
我們習慣將var a = 2
看做是乙個宣告步驟,而實際上js引擎並不這麼認為。它將var a
和a = 2
看做兩個單獨的步驟,第乙個是編譯階段的任務,而第二個則是執行階段的任務
這意味著無論作用域中的宣告出現在什麼地方,都將在**本身被執行前首先進行處理,可以將這個過程形象地想象成所有的宣告(變數和函式)都會被「移動」到各自作用域的最頂端,這個過程被稱為提公升
JS 變數提公升與函式提公升
在 es6 出來之前,沒有塊級作用域,只有全域性作用域 和 函式作用域。變數提公升指的是 將變數宣告提公升到它所在作用域的最開始部分。例子 console.log foo undefined var foo 變數提公升 console.log foo 變數提公升 相當於 var foo consol...
變數提公升 函式提公升
函式表示式 var fn function fn 函式宣告方式 function fn 我們需要重點注意的是,只有函式宣告形式才能被提公升。變數賦值並沒有被提公升,只是宣告被提公升了。但是,函式的宣告有點不一樣,函式體也會一同被提公升。複製 author laifeipeng date 2019 0...
變數提公升,函式提公升
1,變數提公升及函式提公升 2,函式作用域下的變數提公升和函式提公升 思考 變數提公升和函式提公升是怎麼樣產生的?1 在js中js引擎會優先解析var變數和function定義!在預解析完成後從上到下逐步進行!2 解析var變數時,會把值儲存在 執行環境 中,而不會去賦值,值是儲存作用!例如 ale...