系列文章
【javascript基础——系列1】前端页面ajax连接后台服务器传输数据
【javascript基础——系列2】前端页面axios连接后台服务器传输数据
【javascript基础——系列3】js中的事件的事件冒泡、事件捕获
【javascript基础——系列4】关于js的数据类型以及判别方法
【javascript基础——系列5】js的defer和async;parsesint;图片压缩
【javascript基础——系列6】常见的5种JS设计模式;发布订阅者模式
【javascript基础——系列7】变量提升函数提升;内存泄漏
【javascript基础——系列8】函数传参传递值还是引用;函数式编程
【javascript基础——系列10】js中隐藏元素的几种方法以及代码
【javascript基础——系列11】跨域存在的原因以及解决办法
一、变量提升,函数提升
1.1 变量提升
变量声明的提升是以变量所处的第一层词法作用域作为’单位‘的,全局作用域中声明的变量会提升至全局最顶端,函数内声明的变量只会提升到该函数作用域最顶层
var a;
console.log(a); // undefined
a = "a";
var foo = () => {
var a; // 全局变量会被局部作用域中的同名变量覆盖
console.log(a); // undefined
a = "a1";
}
foo();
1.2 函数提升
函数内声明的变量只会提升到该函数作用域最顶层,函数提升只会提升函数声明,而不会提升函数表达式,而且并不会影响到函数外的变量。
console.log(foo1); // [Function: foo1]
foo1(); // foo1
console.log(foo2); // undefined
foo2(); // TypeError: foo2 is not a function
function foo1 () {
console.log("foo1");
};
var foo2 = function () {//函数表达式中变量不会被提升
console.log("foo2");
};
二、内存泄漏
2.1 什么是内存泄漏
-
程序的运行需要内存,只要程序提出要求,操作系统就必须提供内存。
-
对于持续运行的服务进程,必须及时释放内存,否则内存会越来越高就会影响系统性能甚至崩溃。
-
不再用到的内存,没有及时释放的话,这就叫做内存泄漏。
-
内存泄漏是指一块被分配的内存既不能使用又不能被回收,直到浏览器进程结束。即指由于疏忽或错误造成程序未能释放已经不能再使用的内存。
2.2 js的垃圾回收机制
- 解决内存的泄漏,垃圾挥手机制会定期找出那些不用到了的内存,然后释放其内存。
- 现在各大游览器通常采用的垃圾挥手机制有两种方法:标记清除、引用计数。
2.3 内存泄漏的原因和解决办法
- 闭包函数会带来内存泄漏
- 未被清楚的定时器、延时器
- 垃圾回收机制做出判断并回收,但是对于全局变量,很难判断什么时候不用这些变量,无法正常回收。
码字不易~, 各位看官要是看爽了,可不可以三连走一波,点赞皆有好运!,不点赞也有哈哈哈~~~