• JavaScript作用域和预解析


    目录

    作用域

    概述

    变量作用域 

     作用域链

    预解析


    作用域

    概述

    通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

    JavaScript作用域 : 就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突
    js的作用域(es6)之前 : 全局作用域   局部作用域 

    • 全局作用域: 整个script标签 或者是一个单独的js文件
    • 局部作用域(函数作用域) 在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
    1. var num = 10;
    2. var num = 30;
    3. console.log(num);
    4. function fn() {
    5. // 局部作用域
    6. var num = 20;
    7. console.log(num);
    8. }
    9. fn();

    变量作用域 

    在JavaScript中,根据作用域的不同,变量可以分为两种:全局变量和局部变量

    全局变量: 在全局作用域下的变量 在全局下都可以使用
    注意 如果在函数内部 没有声明直接赋值的变量也属于全局变量

    1. <script>
    2. var num = 10; // num就是一个全局变量
    3. console.log(num);
    4. function fn() {
    5. console.log(num);
    6. }
    7. fn();
    8. // console.log(aru);
    9. </script>

    局部变量 在局部作用域下的变量 后者在函数内部的变量就是 局部变量注意: 函数的形参也可以看做是局部变量

    1. function fun(aru) {
    2. var num1 = 10; // num1就是局部变量 只能在函数内部使用
    3. num2 = 20;
    4. }
    5. fun();
    6. // console.log(num1);
    7. // console.log(num2);

    从执行效率来看全局变量和局部变量

    (1) 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源

    (2) 局部变量 当我们程序执行完毕就会销毁, 比较节约内存资源

     作用域链

    • 只要是代码,就至少有一个作用域
    • 写在函数内部的局部作用域
    • 如果函数中还有函数,那么在这个作用域中就又可以诞生—个作用域
    • 根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链

    预解析

     JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行

    预解析 js引擎会把js 里面所有的 var  还有 function 提升到当前作用域的最前面

    代码执行  按照代码书写的顺序从上往下执行

    预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)

            (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面  不提升赋值操作

            (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面  不调用函数

     

     

  • 相关阅读:
    【Hive】insert into 与 insert overwrite的区别
    结对编程 --- 大部分程序员喜欢的编程方式
    华为机试 - 面试
    基于Go语言快速搭建Iris+Xorm后台管理系统
    Zookeeper-集群介绍与核心理论
    web安全(xss及csrf)
    传输层协议UDP/TCP中的那些端口
    2023年9月21日
    【Android笔记23】Android四大组件之Service服务介绍及生命周期
    uniapp中使用编辑器editor
  • 原文地址:https://blog.csdn.net/huijie_0716/article/details/125433315