栈溢出,内存溢出

1.死循环问题
会导致浏览器卡死,无响应

会导致内存溢出???
内存溢出一定是栈用多了,在js开发里面什么东西会占用内存(对象,变量)
变量在栈上,对象在堆上

while(1){
    let a=1;//这个是块级作用域,进入作用域变量创建,离开作用域变量会被销毁,也就是内存进入了,出去消失了这样的循环的
var a=1;//如果用var来声名,var会提升作用域,仍然是操作一个变量,内存进入,出去小时
}
死循环会导致线程忙死因为有很多事要做,cpu会做指令行问题比如加法减法这种,
死循环就会导致cpu进去了出不来了,反复对相同指令不断操作,因此会导致主线程长期被占用,包括js语言,css渲染,html解析,包括布局树的生成都是在主线程之内进行操作的,所以说浏览器有个渲染主线程这个渲染主线程会做很多的事情,由于忙着去执行js代码很多其他事情就执行不了了,就会看到浏览器一直在那转圈圈,这个时候点任何按钮都是没有响应的去复制页面上的东西也不会有反应,就是页面点不动了
关联到浏览器的进程模型,事件循环问题

下面这题:
第一题:
while(1){
    await  1;
}
是等待一个异步操作,也会卡死,没有将主线程交出

第二题:
function delay(duration=1000){
    return new Promise(resolve=>{
        setTimeout(resolve,duration);
    })
}
while(1){
    await delay(0);
}
这个不会导致主线程被占用,也不会被卡死


2.无限递归
会导致栈溢出

第一题:
function delay(duration=1000){
    return new Promise(resolve=>{
        setTimeout(resolve,duration);
    })
}

function m(){
    await 1;
    m();
}
m();
每次调用自身函数,都会创建一个执行上下文,上次的函数还没执行完,又调用了新的执行函数创建执行上下文,就导致执行栈不断堆积,一直到占满溢出,执行栈的空间是固定的


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路光.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值