JavaScriptコードの事前解析+例の詳細について説明します.
3945 ワード
概念 変数名重複宣言無効 事前解析されたコードは、再実行されない段階で を実行します.
例1は、まず変数 とを記録した.は次いで、関数 を記録する.しかし、 .解析完了 前解析プロセスコード 前解析結果 実行プロセスプリント変数 変数 に上書きする.プリント変数 プリント変数 実行完了 実行プロセスコード 例2は、まず関数 に関連する.は次いで、変数 を記録する.ですが、 は次いで、関数 を記録する.しかし、 に関連する.解析完了 前解析プロセスコード 前解析結果 実行プロセスプリント変数 プリント変数 変数 に上書きする.プリント変数 プリント変数 実行完了 実行プロセスコード
var
によって宣言された変数は、前解析時に声明のみを実行し、定義は実行されません.標準値はundefined
です.function
によって宣言された関数は、事前に宣言され、同時に定義される.例1
console.log(a); // a (function a() { console.log('a') })
var a = 10;
console.log(a); // 10
function a() { console.log('a') }
console.log(a); // 10
前解析プロセスa
が存在することを事前に解析し、a
という名前と、その値undefined
a
の宣言を前解析し、関数名a
a
が記録されていることがわかったので、この動作は無効であり、関数体をa
という名前に関連付けるa = undefined
a = function () { console.log('a') }
a = function () { console.log('a') }
a
の値function a() { console.log('a') }
a
は、10に割り当てられ、元の関連する関数をa
の値10
a
の値10
console.log(a)
a = 10
console.log(a)
console.log(a)
console.log(fn) // fn (function fn() { console.log(2) })
function fn() { console.log(1) }
console.log(fn) // fn (function fn() { console.log(2) })
var fn = 10
console.log(fn) // 10
function fn() { console.log(2) }
console.log(fn) // 10
前解析プロセスfn
によって宣言されたことを事前に解析し、fn
という名前を記録し、関数fn
の宣言にプリ解析し、変数名fn
fn
が記録されていることが分かりましたので、この操作は無効です.fn
によって宣言されたことを事前に解析し、fn
という名前fn
が記録されていることが判明したので、この動作は無効となり、次いで、その関数fn = function () { console.log(1) }
fn = function () { console.log(2) }
fn = function () { console.log(2) }
fn
の値function fn() { console.log(2) }
fn
の値function fn() { console.log(2) }
fn
は、10に割り当てられ、元の関連する関数をfn
の値10
fn
の値10
console.log(fn)
console.log(fn)
fn = 10
console.log(fn)
console.log(fn)