**
栈内存,堆内存,消息队列
**
栈内存:
1、基本类型
2、按值访问
3、存储的值大小固定
4、系统会自动分配内存空间
5、空间小,运行效率高
6、先进后出
堆内存:
1、引用类型
2、按照引用访问
3、存储大小不固定
4、内存分配:由代码进行分配
5、空间大,运行效率较低
6、无序存储(根据引用直接获取)
函数也是存在堆内存中
setTimeout的function会放到消息队列中(不论有没有带时间参数),消息队列中的任务会等其他执行完后再执行
DEMO1:
for(int i=0;i<5;i++){
setTimeout(
()=>{
console.log(i)
},1000
)
}
会先运行完循环,再运行消息队列中的console.log,所以这段代码的执行结果为:1秒后打印5次5
DEMO2:
for(int i=0;i<3;i++){
setTimeout(
()=>{
console.log(i)
},1000*i
)
}
1000*i中的i不在function里,所以这个i是循环执行栈里的
所以执行结果是:输出3次3,时间分别是0s,1s,2s