2 **案例
我們js引擎執行js分為兩步:預解析 、**執行。
預解析js引擎會把js裡面所有的var還有function提公升到當前作用於的最前面。
變數提公升:就是把所有的變數宣告提公升到當前作用域的最前面,不提公升賦值操作。
函式提公升:就是把所有的函式宣告提公升到當前作用域的最前面,不呼叫函式。
按照**書寫的順序從上往下執行。
var num=10;
fun();
function fun()
// 輸出為 undefined
// 相當於以下**
var num;
function fun()
num=10;
fun();
var num;
function fun()
fun();
// 輸出為 undefined 20
面試題 重點
在函式內部,沒有宣告直接賦值的變數也屬於全域性變數。
f1();
console.log(c);
console.log(b);
console.log(a);
function f1()
// 輸出為 9 9 9 9 9 undefined
// 相當於以下**
function f1()
f1();
console.log(c);
console.log(b);
console.log(a);
// 輸出為 9 9 9 9 9 undefined
在立即執行函式中,var a = 20; 語句定義了乙個區域性變數 a,由於js的變數宣告提公升機制,區域性變數a的宣告會被提公升至立即執行函式的函式體最上方,且由於這樣的提公升並不包括賦值,因此第一條列印語句會列印undefined,最後一條語句會列印20。
由於變數宣告提公升,a = 5; 這條語句執行時,區域性的變數a已經宣告,因此它產生的效果是對區域性的變數a賦值,此時window.a 依舊是最開始賦值的10,
var a =10;
(function()
)()
刪除 var a = 20;後,第一次輸出發現a=10 是全域性變數,修改a的值為5後輸出為5
var a =10;
(function()
)()
js基礎 預解析
預解析 1.js引擎執行js分為兩步 預解析和 執行 1 預解析 js引擎會把js裡面所有的var 還有function 提公升到當前作用域的最前面 2 執行 按照 書寫的順序從上往下執行 2.預解析分為變數預解析 變數提公升 和函式預解析 函式提公升 1 變數提公升 就是把所有的變數宣告提公升到當...
js函式預解析
js直譯器在執行js 時,分為兩步 預解析 var和function宣告的變數和函式,將變數或函式提公升至當前作用域的最前面 2.逐行執行 例1 function fun fun 輸出 undefined 原因 使用var 宣告的num 進行了函式內作用域提公升,預解析後,如下 function f...
js學習 一 預解析
js學習 一 預解析 1.js引擎執行js分為兩步 預解析 執行 1 預解析 js引擎將js裡面所有的var和function提公升到當前作用域的最前面 2 執行 按照 書寫的順序從上往下執行 2.預解析分為 變數預解析和函式預解析 1 變數預解析 把所有的變數宣告提公升到當前作用域最前面 不提公升...