- 寫在前面:參考嗶哩嗶哩黑馬程式員pink老師教程
- 地址:https://www.bilibili.com/video/BV1Sy4y1C7ha?t=41&p=4
目錄
預決議
變數預決議和函式預決議
變數預決議(變數提升)
函式預決議(函式提升)
解決函式運算式宣告呼叫問題
預決議案例
預決議
- JavaScript 代碼是由瀏覽器中的 JavaScript 決議器來執行的,JavaScript 決議器在運行 JavaScript 代碼的時候分為兩步:預決議和代碼執行,
- 預決議:在當前作用域下, JS 代碼執行之前,瀏覽器會默認把帶有 var 和 function 宣告的變數在記憶體中進行提前宣告或者定義,
- 代碼執行: 從上到下執行JS陳述句,預決議只會發生在通過 var 定義的變數和 function 上,了解預決議能夠讓我們知道為什么在變數宣告之前訪問變數的值是 undefined,為什么在函式宣告之前就可以呼叫函式,
變數預決議和函式預決議
變數預決議(變數提升)
- 預決議也叫做變數、函式提升,
- 變數提升:變數的宣告會被提升到當前作用域的最上面,變數的賦值不會提升,
console.log(num); // 結果是多少? var num = 10; // undefined函式預決議(函式提升)
- 函式提升: 函式的宣告會被提升到當前作用域的最上面,但是不會呼叫函式,
fn(); function fn() { console.log('列印'); }
- 決議為:
function fn() { console.log('列印'); } fn();解決函式運算式宣告呼叫問題
fn(); var fn = function() { console.log('想不到吧'); }
- 決議為:
var fn; fn(); fn = function() { console.log('想不到吧'); }預決議案例
- 案例 1
var num = 10; fun(); function fun() { console.log(num); var num = 20; }
- 決議為:
var num; function fun() { var num; console.log(num); num = 20; } num = 10; fun();
- 案例 2
var num = 10; function fn(){ console.log(num); var num = 20; console.log(num); } fn();
- 決議為:
var num; function fn() { var num; console.log(num); num = 20; console.log(num); } num = 10; fn();
- 案例 3
var a = 18; f1(); function f1() { var b = 9; console.log(a); console.log(b); var a = '123'; }
- 決議為:
var a; function f1() { var b; var a; b = 9; console.log(a); console.log(b); a = '123'; } a = 18; f1();
- 案例 4
f1(); console.log(c); console.log(b); console.log(a); function f1() { var a = b = c = 9; console.log(a); console.log(b); console.log(c); }
- 決議為:
function f1() { var a; a = b = c = 9; // 相當于 var a = 9; b = 9; c = 9; b 和 c 直接賦值 沒有var 宣告 當 全域變數看 // 集體宣告 var a = 9, b = 9, c = 9; console.log(a); console.log(b); console.log(c); } f1(); console.log(c); console.log(b); console.log(a);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/68239.html
標籤:其他
上一篇:Go 語言之常量定義與使用
