變數提公升與函式提公升

2022-02-26 16:16:06 字數 1477 閱讀 3364

定義: 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 aa = 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...