var a =10;
function pay()
pay();//7
console.log(a);//7
/**函式宣告提前;執行js**前,解析器將當前作用域內宣告的所有變數和函
*數都會放到作用域的開始處
*1 function pay(){}會提前宣告;
*2 var a=10;
*3 pay(); 執行函式
*4 a-=3; a首先會在自己的函式作用域內尋找,沒有就在上一層去尋找,一直到找到,如果到
* 最底層也沒找到a的宣告和賦值,則報錯!此時a會找到上一層的 var a=10;全域性變數
* 所以a-=3計算時候改變了全域性變數的值;a-=3 此時var a =7;全域性變數
*5 函式體內 console.log(a) a=7;
*6 外層函式 console.log(a) a=7;
*/
var a = 10;
function test(a)
test(a);//7
console.log(a); //10
/**函式宣告提前;執行js**前,解析器將當前作用域內宣告的所有變數和函
*數都會放到作用域的開始處
*1 function test(a){}會提前宣告;
*2 var a=10;
*3 test(a); 執行函式 test(10);
*4 function test(a){} 此時實參將10賦值給函式體的形參a 就是 var a=10;
*5 a-=3 首先在自己函式域內尋找 發現var a=10; 則函式體內的區域性變數var a=10-3=7;
*6 函式體內 console.log(a) a=7;
*7 外層函式 console.log(a);首先在自己函式域內尋找 發現var a=10; 則全域性變數a=10
*/
js中函式宣告提前
js中普通的變數會宣告提前外,函式也會宣告提前,不同的是由於函式的宣告有兩種方法,宣告提前的方式也就有兩種方式 1 通過 var fn function 定義函式,只是將函式名提前了,函式體沒有提前,如果在函式體前使用fn 呼叫函式就會報錯 fn varfn function 結果 報錯!uncau...
JS宣告提前
js中的宣告提前,變數宣告提前,函式宣告提前,以及宣告提前的順序 console.log a a var a functiona console.log a a 6 a 四個輸出分別是什麼呢?我們來除錯一下,執行到 a 6時輸出如下 最後乙個a 報錯。接下來我們來分析一下原因 一 什麼是變數宣告提前...
js 變數 函式宣告提前問題
1 變數宣告提前 看 function 以上 報錯 referenceerror a is not defined,這很好理解 根本就沒宣告當然報錯啦,往下看 function 以上 對於直譯器來說是下面這樣的,所以沒有報錯,且輸出了undefined function 再來看一中情況 functi...