立即执行函数的问题
来源: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中的代码能够执行:

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