几道题目理解JavaScript作用域、作用域链、预解析规则、表达式

先看题目

1、结果是 undefined

    console.log(a)
    var a = 1
复制代码

2、报错 Uncaught ReferenceError: Cannot access 'a' before initialization

    console.log(a)
    let a = 1
复制代码

3、报错 Uncaught ReferenceError: 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() {console.log(a=4)} 、 1 、1 、3 、3、 Uncaught TypeError: 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

<script>
    var a = 1
</script>
<script>
    console.log(a)
</script>
复制代码

7、Uncaught ReferenceError: a is not defined

   <script>
        console.log(a)
    </script>
    <script>
        var a = 1
    </script>
复制代码

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

猜你喜欢

转载自blog.csdn.net/weixin_33860528/article/details/91430771