zoukankan      html  css  js  c++  java
  • 作用域内存的销毁机制

    堆内存:只要这个内存没有被任何变量占用,浏览器就会主动销毁他,其他的需要手动销毁```注意以后在做项目的时候遇到一个对象后面不用了,手动清空一下,让他的值赋值成null就可以了;


    栈内存(作用域):
    全局作用域:关闭浏览器的时候销毁,以后再做项目的时候尽量避免全局变量的使用
    私有作用域:相同的函数每一次执行都会形成一个私有作用域,他们之间没有任何关系
    1.立即销毁 函数没有返回值的,或者返回的内容没有被占用,那浏览器就会把它销毁
    2.暂时不销毁:函数有返回值 返回了一个函数,这个函数接着就执行了,执行完了之后浏览器会抽时间销毁,(具体每个浏览器的机制不同)
    3.不销毁:如果函数执行返回一个一个引用数据类型的地址一直被占用着,就不会销毁

    function fn1(){
    var n=1;
    console.log(n++)
    }
    fn1();
    fn1();
    fn1();
    

    function fn(){
    console.log('销毁')}
    fn();
    这个函数执行完之后对外面没有什么影响就销毁了
    
    function fn2(){
    var n=0;
    return function(){
    console.log(n++)
      }
    }
    var f=fn2();
    
    当一个函数私有作用域return返回一个函数时,被外界的变量接収,那这个私有作用域不会销毁
    

    作用域不销毁这个概念主要使用在给元素绑定事件的时候

    box.oncklick=function(){
    var n=0;
    console.log(n)
    }
    var oLis=document.getElementsByclassName("oUl")[0].getElementsByTagName("li");
    for(var i=0;i<oLis.length:i++){
    oLIs[i].onclick=(function (){
    //作用域中的参数i是私有变量
    return function (i){
    console.log(i)}
    )(i)}这个i传进去的是全局的i
    

    i=0,先让自执行函数执行,形成一个私有作用域,先给参数赋值私有变量 i=0,oLis[0].onclick= function (){cosole.log(i)}
    比如我去点击oLis[1];
    把function (){console.log(i)}拿来执行,遇到变量i,不是私有的,我往上找,上一级f1,f1中有私有变量i=1,然后输出i

    预解释时候不管条件是否成立,都进行预解释,但是函数只声明不定义,代码执行的时候,条件成立的话,先给函数定义

  • 相关阅读:
    解析XML
    事务
    js小工具
    plsql用过的流程语句
    查询语句
    存储过程
    用过的CRT命令
    mysql常用命令
    Spirng MVC demo 完整示例01 环境搭建
    jmeter多个http请求串联
  • 原文地址:https://www.cnblogs.com/Jiazexin/p/7080363.html
Copyright © 2011-2022 走看看