JavaScript 匿名函数自调(立即执行函数)
发布日期:2021-05-07 19:33:06 浏览次数:14 分类:技术文章

本文共 869 字,大约阅读时间需要 2 分钟。

 

(function () { /* code */ } ()); // W3C推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的

立即执行函数:函数执行过后立即被销毁。

由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的;

只要记住一点,匿名函数前面加的任何运算符、操作符都不起运算和操作作用,而只是为了把匿名函数包装成一个表达式执行!!!

只有表达式才能被执行符号执行,能被执行符号执行的表达式,函数名字会被自动忽略。

 

立即执行函数的作用是

    1.创建一个独立的作用域,这个作用域里面的变量,外面访问不到,这样就可以避免变量污染。

    2.闭包和私有数据。提到闭包,不得不提下那道经典的闭包问题。

  • 这是第一条
  • 这是第二条
  • 这是第三条

很多人觉得这样的执行效果是点击第一个li,则会输出1,点击第二个li,则会输出二,以此类推。但是真正的执行效果是,不管点击第几个li,都会输出3。因为 i 是贯穿整个作用域的,而不是给每个 li 分配了一个 i,用户触发的onclick事件之前,for循环已经执行结束了,而for循环执行完的时候i=3。

但是如果我们用了立即执行函数给每个 li 创造一个独立作用域,就可以改写为下面的这样,这样就能实现点击第几条就能输出几的功能。

在立即执行函数执行的时候,i 的值被赋值给 ii,此后 ii 的值一直不变。i 的值从 0 变化到 3,对应3 个立即执行函数,这 3个立即执行函数里面的 ii 「分别」是 0、1、2。 

其实ES6语法中的let也可以实现上述的功能,仅仅是将for循环中的var换成let,如下所示,有木有觉得很简单明了。

那很多人就觉得用let可以完全取代立即执行函数,到目前为止,可能是我眼界所限制,我所能用到的立即执行函数的确能被let替代,前提是你的运行环境(包括旧的浏览器)支持ES2015。如果不支持,你将不得不求助于以前经典的函数。

 

 

 

 

上一篇:js高级----回顾prototype、__proto__、constructor与JavaScript的原型链继承
下一篇:超详细的 Git 实战教程

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年03月29日 03时59分25秒