立即执行函数
一、立即执行函数的作用与写法
格式:()()
作用:创建一个独立的作用域。这个作用域里面的变量,外面访问不到(即避免了「变量污染」)。并且立即执行,执行一次后就销毁
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script> 12 //立即执行函数 13 /* function f() { 14 15 }; 16 f();*/
//第一种写法 17 (function () { 18 console.log('hi') 19 })();
//第二种写法 20 (function () { 21 console.log('hi') 22 }()); 23 24 /* function () { 25 console.log('hi') 26 } ();错误语法*/ 27 28 // 事件 dom操作 29 </script>
案例二
1 var liList = ul.getElementsByTagName('li') 2 for(var i=0; i<6; i++){ 3 (function(j){ 4 liList[j].onclick = function(){ 5 alert(j) // 0、1、2、3、4、5 6 } 7 })(i) 8 }
二、立即执行函数与闭包的区别
1 for (var i = 0; i < 5; i++) { 2 (function (i) { 3 setTimeout(function () { 4 console.log(i); 5 }, 1000); 6 })(i); 7 } 8 console.log(i);
//依次输出 5 0 1 2 3 4
因为for循环以后 i 就会变成 5,上面代码最后一行的输出将先执行,所以先输出 5。JS中调用函数传递参数都是值传递 ,所以当立即执行函数执行时,首先会把参数 i 的值复制一份,然后再创建函数作用域来执行函数,循环5次就会创建5个作用域,所以1秒后几乎会同时输出 0 1 2 3 4 。
立即执行函数和闭包没有什么关系,只是两者会经常结合在一起使用而已,但两者有本质的不同。
立即执行函数和闭包只是有一个共同优点就是能减少全局变量的使用。
立即执行函数只是函数的一种调用方式,只是声明完之后立即执行,这类函数一般都只是调用一次,调用完之后会立即销毁,不会占用内存。
闭包则主要是让外部函数可以访问内部函数的作用域,也减少了全局变量的使用,保证了内部变量的安全,但因被引用的内部变量不能被销毁,增大了内存消耗,使用不当易造成内存泄露。
总结:立即执行函数调用一次立即摧毁,闭包不会被销毁增加内存的消耗,二者都减少了全局变量的使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具