• JS高级:作用域与作用域链


    1、定义

            是一块“地盘”,一个代码段所在的区域

            是静态的(相对于上下文对象),也就是编写代码时就确定了

    2、分类

            全局作用域

            函数作用域

            没有块作用域(ES6有块作用域,用{}包含的)

    3、作用

            隔离变量,不同的作用域下同名变量不会有冲突

    问题一共几个作用域:3个 n+1

    1. var a = 10,
    2. b = 20;
    3. function fn(x) {
    4. var a = 100,
    5. c = 300;
    6. console.log('fn', a, b, c, x);
    7. function bar(x) {
    8. var a = 1000,
    9. d = 400;
    10. console.log('bar', a, b, c, d, x);
    11. }
    12. bar(100);//bar 1000 20 300 400 100
    13. bar(200);//bar 1000 20 300 400 200
    14. }
    15. fn(10);//fn 100 20 300 10

     2、作用域与执行上下文

            1、区别

            全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时候就已经确定了。而不是在函数调用时

            全局执行上下文环境是在全局作用域确定之后,js代码马上执行之前创建

            函数执行上下文是在调用函数时,函数体代码执行之前创建

            2、区别

                    作用域是静态的,只要函数定义好了就一直存在,且不会变化

                    执行上下文环境是动态的,调用函数时创建,函数调用结束时上下文环境就会被自动释放

            3、联系

            执行上下文环境(对象)是属于所在的作用域

            全局上下文环境==>全局作用域

            函数上下文环境==>对应函数的使用域

    作用域链:嵌套的函数使用 构成由内向外的作用域--从内向外找变量

    1. var a = 1;
    2. function fn(x) {
    3. var b = 2;
    4. function bar() {
    5. var c = 3;
    6. console.log(a, b, c)
    7. }
    8. bar()
    9. }
    10. fn();//123

    从内向外找

  • 相关阅读:
    【Python自学笔记】报错No module Named Wandb
    数据建模设计
    获得淘宝商品快递费用接口调用展示
    以结构体为键值时的map报错
    Visual Studio 2019 C# winform CefSharp 中播放视频及全屏播放
    MongoDB 应用实战
    create® 3入门教程-反应Reflexes
    vite Uncaught ReferenceError: global is not defined (has-symbols)
    ANSYS Maxwell 3D线圈磁场仿真分析
    基于Java的设计模式-观察者模式
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/127682284