美文网首页程序员让前端飞
javascript的预解释-作用域-内存的释放

javascript的预解释-作用域-内存的释放

作者: 知识搬运工horace | 来源:发表于2017-09-06 19:18 被阅读0次

作用域链:
当函数被调用的时候,会形成一个私有作用域,看私有作用域中,是否存在私有变量A:
1)如果有私有变量A:那么整个作用域中的A,跟外界没有任何关系;所有该作用域中的A,都是私有变量;
2)如果没有私有变量A:就会往上级作用域进行查找,找到的话,直接用,找不到继续找,一直找到window还没有,就会报错!;
私有变量有两种:
①当前作用域下带var的;
②形参;

堆内存的释放

对象数据类型或者函数数据类型在[定义]的时候首先都会开辟一个堆内存,堆内存又有一个引用的地址,如果外面有变量等知道了这个地址,我们就说这个内存被占用了,就不能销毁了。
"var obj1 = {};
var obj2 = obj1;"
我们想要让堆内存释放/销毁,只需要把所有引用它的变量值赋值为null就可以,如果当前的堆内存没有任何东西被占用了,那么浏览器会在空闲的时候把它销毁...(也叫垃圾回收)
"obj1 = null;
obj2 = null;"

栈内存

全局作用域 全局作用域不销毁,只有当页面关闭的时候全局作用域才会销毁。
私有作用域
(只有函数执行会产生私有作用域)
1、当代码执行完成后,我们当前作用域都会主动的进行释放和销毁。
2、但是,还是存在特殊情况的:
a、当私有作用域中的部分内存被作用域以外的东西占用了,那么当前的这个作用域就不能销毁了。
例子:1)函数执行返回了一个引用数据类型的值,并且在函数外面被一个其他的东西给接收了,这种情况下一般形成的私有作用域都不会被销毁。
"function fn() {

var num=100;
return function fn(){
    num++;

}

}
fn();" 这个函数是销毁。
function fn(){
var num=1000;
return function(){
}
}
var f=fn(); //fn执行形成的这个私有作用域就不在销毁了。

"function fn() {
var num=100;
return 10;
}
var f=fn();" //私有作用域就可以销毁了

function fn() {
var num=100;
return function (){
alert(1);

};

}
fn()();
/这种情况属于不立即销毁-->fn返回的函数没有被其他的东西占用,但是还需要执行一次在被销毁。

2、在一个私有作用域中给DOM元素的事件绑定方法,一般情况下我们的私有作用域,都不销毁。

var oDiv = document.getElementById("div1");

!function (){
    oDiv.onclick =function(){

    }
}();//当前自执行函数形成的这个私有作用域也是不可以销毁 

总结

函数能被销毁的情况:
1函数最后的值是一个值,不再调用此函数了,就可以被销毁。
不能被销毁的情况:
1函数里有全局变量。
2函数有事件发生,不能被销毁,
3函数最后的值还是函数,不能被销毁。

相关文章

  • javascript的预解释-作用域-内存的释放

    作用域链:当函数被调用的时候,会形成一个私有作用域,看私有作用域中,是否存在私有变量A:1)如果有私有变量A:那么...

  • 1.预解释和作用域链

    预解释 作用域链

  • JS-NO.8

    内存释放: 栈内存的形成和释放: 全局作用域: 形成:当浏览器加载完页面的时候,全局作用域形成 销毁:关闭页面,关...

  • * 预解释

    * 预解释 * 什么是预解释 * 关于预解释: 带var和带function不同 * 函数执行四阶段 * 作用域链...

  • 作用域、作用域链

    作用域 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 作用域下浏览器的操作 预解析(找v...

  • javascript的预解释一

    什么是javascript的预解释? 在当前作用域下,JS代码执行之前,浏览器会对带var的和function的进...

  • javascript高级程序设计读书笔记(四)

    变量,作用域,和内存的问题 javascript高级程序设计读书笔记(四) 变量,作用域,和内存的问题 变量 不存...

  • 作用域和执行上下文环境的关系

    非官方解释: 作用域: Javascript中,有全局作用域,当然除了这个,还有函数创建的作用域;只要函数创建了,...

  • 成长(4/2000)——面试题合集1

    Javascript 1.作用域 概念: 作用域分全局作用域和函数作用域 预编译 js的两个阶段,预编译和解释执行...

  • JavaScript中的内存释放

    一、如何查找上级作用域 在 JavaScript中的预解析 ,有讲到作用域链的概念,本次在正式讲JavaScrip...

网友评论

    本文标题:javascript的预解释-作用域-内存的释放

    本文链接:https://www.haomeiwen.com/subject/qzuvjxtx.html