• 作用域


    作用域的销毁

    全局作用域和私有作用域;
    全局作用域的销毁: 只有当关闭页面时,或关闭浏览器时,全局作用域才会销毁;不销毁的作用域;
    私有作用域的销毁:
    函数执行:形成一个私有作用域;提供代码运行环境;存储基本数据类型值;
    闭包:
    1.保护了里面的私有不受外界的干扰;
    2.存储值;
    function fn() {
    var num = 10;
    }
    fn();
    fn();
    console.log(num);

    立即销毁:

    一般情况下,函数执行完成之后,当前的作用域会立即销毁;
    函数每执行都会开辟一个新的私有作用域;并且新的私有作用域跟之前的作用域没有关系;是两个不同的栈内存;
    函数每执行一次,都会重新开辟一个新的栈内存

    不销毁的作用域:

    1、函数执行return出一个引用数据类型的值

    2、函数执行return出的引用数据类型值并且被外界接收;【被占用】

    function fn() {
    var t = 10;
    return function () {
    console.log(t)
    }
    };
    var f = fn();
    f()
    f()

    不立即的销毁:

    需要等待里面的小函数执行完成之后,那么外层作用域才会随着销毁;
    function fn() {
    var t = 10;
    return function () {
    console.log(t)
    }
    };
    fn()();

    全局作用域:

    当打开浏览器时,浏览器会形成一个全局的作用域,给当前代码提供运行环境的;并且存储基本数据类型值
    基本数据类型存储到栈内存中,全局作用域是最大的一个栈内存;
     
    全局对象 window : 是全局下最大的一个对象;内置属性
    console.log(typeof window);//对象;
     
    DOM的回流和重绘
    浏览器的渲染机制:先形成DOM树,在形成css树,最后两个树形成render树
     
    全局作用域: 当打开页面时,形成一个全局的作用域;
    私有作用域: 函数每执行一次,都会形成一个新的私有作用域;
    作用域: 1.给代码提供运行环境 2.存储基本数据类型值;
     
    全局作用域 
    1.会给window新增一个键值对
    2.全局下定义的函数相当于给window新增键值对,属性名是函数名,属性值是整个函数
     
    全局变量:全局作用域下声明的变量就是全局变量

    私有作用域:

    定义:函数执行的时候会形成一个私有的作用域
    私有变量:
    1、在函数体中被var,被function过,就是一个私有变量
    2、函数的形参也是私有变量
     
    函数执行的过程
    1、首先形成一个私有作用域,开辟一个栈内存
    2、形参赋值
    3、变量提成
    4、代码从上到下运行
    5、作用域是否销毁
     
    私有变量:私有作用域下声明的变量叫做私有变量+形参

    块级作用域:

    定义:除了私有作用域和对象以外{}包裹的作用域都是 块级的作用域
    函数执行首先会形成一个私有的作用域;
    函数体中的变量发生在私有作用域形成之后
     

     

    作用域链

    函数执行形成一个私有的作用域(保护私有变量),进入到私有作用域中,首先变量提升(声明过的变量是私有的)接下来代码执行
    1、执行的时候遇到一个变量,如果这个变量是私有的,那么按照私有处理即可
    function fn(){
    //=>[私有作用域]
    //变量提升:var a;(私有变量)
    console.log(a);//->undefined
    var a=12;
    console.log(a);//->12
    }
    fn();
    console.log(a);//=>Uncaught ReferenceError: a is not defined闭包机制:私有作用域保护里面的私有变量不受外界的干扰
    2、在当前作用域下找到一个变量,优先找它的私有变量,如果私有变量没有,去它上级【要看当前作用域下在哪开辟的,在哪开辟的,上级就是谁】找,如果上级还没有,一直找到window全局作用域为止,全局还没有会报错。我们把这种查找机制叫做作用域链
    1)如果上级作用域有这个变量,我们当前操作的都是上级作用域中的变量(假如我们在当前作用域把值改了,相当于把上级作用域中的这个值给修改了)
    2)如果上级作用域中没有这个变量(找到window也没有):
    变量=值 : 相当于给window设置了一个属性以后操作window下就有了
    alert(变量):想要输出这个变量,但是此时是没有的,所以会报错
    //console.log(a);//Uncaught ReferenceError: a is not defined
    console.log(window.a);//=>undefined
    a=12;//<=> window.a=12
    console.log(a);//=>12 <=>window.a
    console.log(window.a);//=>12 
  • 相关阅读:
    设计权限管理系统(十一)
    设计权限管理系统(十)
    设计权限管理系统(九)
    设计权限管理系统(八)
    设计权限管理系统(七)
    设计权限管理系统(六)
    设计权限管理系统(五)
    设计权限管理系统(四)
    设计权限管理系统(三)
    Dom的深度优先遍历和广度优先遍历
  • 原文地址:https://www.cnblogs.com/CCxi/p/9459968.html
Copyright © 2020-2023  润新知