• js作用域


    精进成长的本质是消除模糊。

    作用域:限制变量可以被访问的环境。
    js的作用域分为全局作用域,函数作用域,块级作用域(ES6新增)

    块级作用域:含有let,const变量的代码块({}
    js是弱语言类型(可以不声明变量类型,直接赋值)。

    i=100;//Number类型
    i="variable";//String类型
    i={x:4};//Object类型
    i=[1,2,3];//Array类型
    
    • 1
    • 2
    • 3
    • 4

    js变量声明方式分为隐式声明和显式声明

    var i=100;//显式声明
    i=100;//隐式声明
    
    • 1
    • 2

    js变量分为局部变量和全局变量

    局部变量:
    (1)函数内使用var声明的变量(显式声明)
    (2)函数参数列表中的形参(隐式声明)
    全局变量:
    (1)函数外var声明的变量(显式声明)
    (2)函数内没有使用var声明的变量(隐式声明)
    (3)使用window全局对象声明的变量,如:window.a=123;

    执行上下文:

    1、解释:代码被编译和执行时所在的环境,也可以称之为执行环境
    2、分类:“全局执行上下文”,“函数执行上下文
    全局执行上下文:默认的、最基础的执行上下文,不在任何函数中的代码都位于“全局执行上下文”中,一个程序中只能存在一个“全局执行上下文”。全局环境不会被回收。它做了两件事:
    a.创建一个全局对象,在浏览器中这个全局对象是window对象。
    b.将this指向这个全局对象,在全局执行上下文中指向window。
    函数执行上下文:每次调用函数时,都会为该函数创建一个新的执行上下文,只有在函数被调用时才会被创建。

    执行上下文的生命周期:

    一共有三个阶段:创建阶段、入栈执行阶段、出栈回收阶段
    执行栈也叫调用栈,先入后出结构,入栈和出栈对应内存的申请和释放。

    作用域

    		var a = 1;
            if(true){
                // 死区开始--------------------------
                // 访问 a 都会报错,不能在声明之前使用
                a = 2;
                console.log(a);
                // 死区结束--------------------------
                let a;
                console.log(a); // undefined
                
                a = 3;
                console.log(a); // 3
            }
            console.log(a);//1,不会影响块作用域之外的a的值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    以上if中的代码块是一个单独的块作用域,不影响全局作用域中的变量a。

  • 相关阅读:
    富格林:采用安全出金操作方法
    LeetCode--回文数
    如何解决d3dcompiler_43.dll丢失问题?d3dcompiler_43.dll丢失修复方法
    渗透测试流程是什么?7个步骤给你讲清楚!
    英语恶补ing
    正射影像矫正--基于无人机图片
    leecode959. 由斜杠划分区域
    超详细的网络抓包神器 tcpdump 使用指南
    使用CPR库和Python编写程序
    零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别
  • 原文地址:https://blog.csdn.net/EmilyHoward/article/details/127855359