JS高階之預解析

2021-10-18 07:18:47 字數 2320 閱讀 1918

提前賦值

預解析結束後,在逐行解讀**

console.

log(a)

var a =1;

//解析過程

var a;

console.

log(a)

a =1;

console.

log(b)

;var b =

123;

functionb(

);解析過程

var b;

//函式,在正式執行**前,賦值為整個函式塊

functionb(

);console.

log(b)

; b =

123;

console.

log(a)

var a=1;

functiona(

) console.

log(a)

var a=

3;

console.

log(a)

functiona(

) console.

log(a)

//解析過程

//預解析的過程

var a;

functiona(

)functiona(

)//逐行解析

console.

log(a)

// function a()

a =1;

console.

log(a)

// 1

a =3;

console.

log(a)

//3 console.

log(a)

//3

es5中只有全域性作用域和區域性作用域之分(函式內的為區域性作用域)

函式內可以取全域性作用域 全域性不可以取區域性作用域

var a=1;

//全域性作用域

function

fn1();

fn1(

)function

fn1();

fn1();

console.

log(a)

;//拿不到a

擴充套件

//1)

var a =1;

functionf1(

);f1(

);//1//2)

functionf1(

);f1(

);console.

log(a)

;//報錯

//3)

var a =1;

functionf1(

);f1(

);//1 console.

log(a)

;//2

//4)

// 全域性變數和區域性變數同名的坑

// (1)在全域性變數和區域性變數不同名時,其作用域是整個程式。詳見(3)

// (2)在全域性變數和區域性變數同名時,全域性變數的作用域不包含同名區域性變數的作用域。詳見(4)

var a =1;

functionf1(

);f1(

);//undefined

console.

log(a)

;//1

面試題

//面試題1

var a =10;

functionf1(

)f1()

;//f1()解析過程

var b;

var a;

var c;

b =2*a //nan

a =20;

c =21;

console.

log(b)

;//nan

console.

log(c)

;//21

//面試題2

var a=10;

function

test()

test()

;//test()解析過程

var a;

console.

log(a)

;//undefined

a =100;

console.

log(

this

.a);

//this === window var a=10;

console.

log(a)

;//100

JS學習之預解析

doctype html utf 8 js預解析 title 情況一 報錯,num未定義 情況二 坑1 console.log num undefined var num 10 由於 執行是先解析再執行 所以上面的 等價於 var num console.log num num 10 由於num在定...

JS高階系列 預解析和宣告提公升

程式在執行過程中,會先將 讀取到記憶體中檢查,會將所有的宣告在此時進行標記,從而讓js直譯器知道有這個名字,後面在使用名字的時候,不會出現未定義的錯誤 變數的宣告 變數的宣告就是讓js直譯器知道有這個名字,沒有任何資料與之對應 函式的宣告 函式的宣告分為函式名和函式體兩部分 函式名的宣告與變數的宣告...

js基礎 預解析

預解析 1.js引擎執行js分為兩步 預解析和 執行 1 預解析 js引擎會把js裡面所有的var 還有function 提公升到當前作用域的最前面 2 執行 按照 書寫的順序從上往下執行 2.預解析分為變數預解析 變數提公升 和函式預解析 函式提公升 1 變數提公升 就是把所有的變數宣告提公升到當...