【javascript基础——系列7】变量提升函数提升;内存泄漏

本文是JavaScript基础系列的第七篇,主要讲解变量提升和函数提升的概念,以及深入探讨内存泄漏的原因、js的垃圾回收机制和解决内存泄漏的方法。通过实例分析了变量提升和函数提升的规则,并介绍了可能导致内存泄漏的情况,如闭包、未清除的定时器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章

【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基础——系列9】函数防抖与节流

【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 内存泄漏的原因和解决办法

  1. 闭包函数会带来内存泄漏
  2. 未被清楚的定时器、延时器
  3. 垃圾回收机制做出判断并回收,但是对于全局变量,很难判断什么时候不用这些变量,无法正常回收。

码字不易~, 各位看官要是看爽了,可不可以三连走一波,点赞皆有好运!,不点赞也有哈哈哈~~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让子弹飞一会儿=>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值