立即执行函数的问题

来源:2-3 简单适配实现

慕莱坞9486019

2021-04-24 17:43:29

​我想问一下,为什么要把下面这句话放到立即执行函数里

window.addEventListener('resize', setRemUnit);

立即执行函数执行完毕后不是销毁掉了吗,你给window全局对象的resize上面绑定了setRemUnit方法,但是立即执行函数执行完后setRemUnit就消失了,这个时候你再点击刷新按钮如何找到setRemUnit方法去调用?求解答


写回答

1回答

好帮手慕久久

2021-04-24

同学你好,解答如下:

如果立即执行函数中的内容,被其他人引用了,那么这个立即执行函数就不会被销毁。window.addEventListener('resize'setRemUnit);这句代码是监听window对象的resize事件(改变窗口大小时触发)。由于事件处理函数setRemUnit是立即执行函数里面的,即全局对象引用了立即执行函数中的内容,那么立即执行函数就不会被销毁(严格来说是立即执行函数形成的作用域不会被销毁)。所以立即执行函数执行完,setRemUnit还在,因此改变窗口大小时,setRemUnit中的代码能够执行:

http://img.mukewang.com/climg/6083ec9b0a3002ff10090349.jpg

点击刷新按钮,浏览器会刷新,与旧页面相关的内容会都被销毁。但是页面重新加载后,会有一个新页面诞生,此时代码会重新执行一次,setRemUnit会新建,所以逻辑还是正常的。

祝学习愉快!

0

0 学习 · 15276 问题

查看课程