美文网首页
JavaScript基础--变量作用域和预解析

JavaScript基础--变量作用域和预解析

作者: 绚丽多彩的白 | 来源:发表于2020-09-18 20:22 被阅读0次

作用域

  • 在JavaScript中{}外面的作用域, 我们称之为全局作用域
  • 在JavaScript中函数后面{}中的的作用域, 我们称之为"局部作用域"
  • 在ES6中只要{}没有和函数结合在一起, 那么应该"块级作用域"
  • 块级作用域和局部作用域区别
    • 在块级作用域中通过var定义的变量是全局变量
    • 在局部作用域中通过var定义的变量是局部变量
    • 无论是在块级作用域还是在局部作用域, 省略变量前面的let或者var就会变成一个全局变量
  • 在JavaScript中定义变量有两种方式
    • ES6之前: var 变量名称;
    • ES6开始: let 变量名称;
  • 区别
    • 通过var定义变量,可以重复定义同名的变量,并且后定义的会覆盖先定义的
    • 如果通过let定义变量, "相同作用域内"不可以重复定义同名的变量
    • 通过var定义变量, 可以先使用后定义(预解析)
    • 通过let定义变量, 不可以先使用再定义(不会预解析)
    • 无论是var还是let定义在{}外面都是全局变量
    • 将var定义的变量放到一个单独的{}里面, 还是一个全局变量
    • 将let定义的变量放到一个单独的{}里面, 是一个局部变量

作用域链

  • JavaScript代码中至少有一个作用域, 即全局作用域。
  • 凡是代码中有函数,那么这个函数就构成另一个作用域。
  • 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。
  • 将这样的所有的作用域列出来,可以形成的结构就称之为作用域链。
<script>
    var num = 123; // 0级作用域链
    function test() { // 0级作用域链
        var num = 666; // 1级作用域链
        console.log(num);
        function demo() { // 2级作用域链
            var num = 777;
            console.log(num);
        }
        demo();
    }
    test();
    console.log(num);
</script>

预解析

  • JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。
  • JavaScript解析器执行JavaScript代码的时候,分为两个过程
    • 预解析过程
    • 代码执行过程
  • 预解析过程:
    • 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
    • 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
    • 先提升var,在提升function。
  • 注意点:
    • 变量和函数同名时, 函数的优先级高

相关文章

  • JavaScript基础--变量作用域和预解析

    作用域 在JavaScript中{}外面的作用域, 我们称之为全局作用域 在JavaScript中函数后面{}中的...

  • 作用域、作用域链

    作用域 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 作用域下浏览器的操作 预解析(找v...

  • Javascript 基础 And 进阶

    Javascript 基础 And 进阶 知识点: 原型链 this指向 作用域和预解析 new关键字 闭包 DO...

  • JS高级-闭包、沙箱

    作用域,作用域链,预解析 变量:局部变量、全局变量 作用域:变量的使用范围 js中没有块级作用域,一对括号中定义的...

  • 作用域和闭包

    变量提升(预解析) javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,有意思的是,...

  • js小知识点(预解析 引用 异常 严格模式)

    预解析:会预先解析一些(变量定义、函数会预解析);var a=12;只把var a提到作用域的顶部js会把变量的声...

  • javascript解析顺序和变量作用域

    javascript解析顺序和变量作用域 作用域:指的就是一段代码的作用范围。作用域可以提高程序的逻辑性和安全性,...

  • JavaScript作用域和预解析

    作用域链 默认情况下全局作用域, 我们称之为0级作用域 只要定义一个函数就会再开启一个作用域 如果该函数是在全局作...

  • JavaScript作用域和预解析

    作用域 JavaScript中也有作用域的概念 相同作用域内不能有同名的变量和函数, 不同作用域内可以有同名的变量...

  • JavaScript(1)预解析

    预解析只会发生在通过var定义的变量和function上。 一、原理 1. 定义:预解析:在当前作用域下,js运行...

网友评论

      本文标题:JavaScript基础--变量作用域和预解析

      本文链接:https://www.haomeiwen.com/subject/cxscyktx.html