變數提公升 函式提公升

2022-05-27 03:24:10 字數 1206 閱讀 9059

如果熟悉js**執行的過程,這個問題不難理解

一、變數提公升

es5中沒有塊作用域,有全域性作用域、區域性作用域(函式)等

//

不宣告定義變數

console.log(name) //

報錯,變數沒有定義

//變數提公升

console.log(info) //

undefined,不報錯

var info = "hello";

function

fun()

fun();

之所以出現這種情況,是因為變數提公升導致的;上述過程相當於:

var info; //

先宣告變數,沒有賦值

function

fun()

//不宣告定義變數

console.log(name) //

報錯,變數沒有定義宣告

//變數提公升

console.log(info) //

undefined,不報錯

info = "hello";

fun();

二、函式提公升

建立函式有三種方式:

1.函式宣告

2.函式表示式

3.使用function物件建立(不推薦使用)

只有在「函式宣告」方式中,函式才會提公升。

函式提公升:執行函式**時,先執行函式宣告;

//

只有函式宣告形式才會函式提公升

sayhello(); //

不會報錯,正常執行

function

sayhello()

fun();

//報錯(undefined is not a function) ,此時fun是個變數,雖然會變數提公升,但在此行值為undefined;undefined不是函式,因此這句報錯

var fun = function(){}

相當於如下:

function

sayhello()

varfun;

sayhello();

//不會報錯,正常執行

fun();

//此時fun值為undefined,報typeerror

fun = function(){}

變數提公升 函式提公升

函式表示式 var fn function fn 函式宣告方式 function fn 我們需要重點注意的是,只有函式宣告形式才能被提公升。變數賦值並沒有被提公升,只是宣告被提公升了。但是,函式的宣告有點不一樣,函式體也會一同被提公升。複製 author laifeipeng date 2019 0...

變數提公升,函式提公升

1,變數提公升及函式提公升 2,函式作用域下的變數提公升和函式提公升 思考 變數提公升和函式提公升是怎麼樣產生的?1 在js中js引擎會優先解析var變數和function定義!在預解析完成後從上到下逐步進行!2 解析var變數時,會把值儲存在 執行環境 中,而不會去賦值,值是儲存作用!例如 ale...

變數提公升, 函式提公升之我見

console.log a undefined var a 1 上先輸出,後宣告,應該輸出 a is not defined 但實際上輸出 a 時,a 沒有報 a is not defined 說明 a 已經被宣告,未被賦值 這種宣告位置被提公升到作用域最高的現象,就是所謂的變數提公升 同時還告訴我...