いくつかのテーマはJavaScript作用領域、作用ドメインチェーン、事前解析規則、表現を理解します.

3047 ワード

まずテーマを見ます
1、結果はundefinedです.
    console.log(a)
    var a = 1
2、Unicaght ReferenceError:Canot access'a'before initiazationを誤報しました.
    console.log(a)
    let a = 1
3、Unicaght ReferenceErrerを間違えました.a is not defined
    console.log(a)
    a = 1
4、結果が強すぎるa(){a=4}、1、1、3、3
    console.log(a)
    var a = 1
    console.log(a)
    function a() {a=2}
    console.log(a)
    var a = 3
    console.log(a)
    function a() {a=4}
    console.log(a)
5、結果が強すぎるa(){consolie.log(a=4)}、1、1、3、3、Uncaugt TypeErr:a is not a function
    console.log(a)
    var a = 1
    console.log(a)
    function a() {a=2}
    console.log(a)
    var a = 3
    console.log(a)
    function a() {console.log(a=4)}
    console.log(a)
    a()
6、1

    var a = 1


    console.log(a)

7、Uncaugt ReferenceError:a is not defined
   
        console.log(a)
    
    
        var a = 1
    
8、undefined、1
   var a = 1
    function f() {
        console.log(a)
        var a = 2
    }
    f()
    console.log(a)
9、1、2
    var a = 1
    function f() {
        console.log(a)
        a = 2
    }
    f()
    console.log(a)
10、undefined、1
    var a = 1
    function f(a) {
        console.log(a)
        a = 2
    }
    f()
    console.log(a)
11、1、1
    var a = 1
    function f(a) {
        console.log(a)
        a = 2
    }
    f(a)
    console.log(a)
ブラウザ解析プロセス
1、事前解析
var functionパラメータを探して、変数はundefinedを与えて、functionは全体の関数ブロックscriptのために上から下の関数は中から外までです.
2、コードを逐行解読する
表式(+-*/%+-!!)は、あらかじめ解析した値を変更できます.関数宣言は式ではなく、関数呼び出しも部分的なドメインです.
転載先:https://juejin.im/post/5ce4e808518825333d1b9248