JavaScript中let能否彻底取代立即执行函数表达式(IIFE)?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1325个文字,预计阅读时间需要6分钟。
前言,最近,我写了一篇关于Java IIFE模式语法文章,来解释为什么我们用现在的方式来写立即执行函数表达式。少数读者批评论文过时了,都在争论ECMA 2015中引入的块级作用域。
前言
最近,我写了一篇关于syntax of Java's IIFE pattern的文章,来解释为什么我们用现在的方式来写立即执行函数表达式。少数的读者批评文章过时了,都在争论在ECMA 2015中介绍的块级作用域变量使IIFE变得过时了。
恰恰相反,立即执行函数表达式一点也没有过时!因为这个理由,我决定写这篇后续文章来介绍一些立即执行函数表达式的常见用法。注意以下的列表是不完整的,所以如果你喜欢的用法没有在文章出现,希望你不要有什么不好的感觉。
函数作用域 VS 块级作用域
通过var关键字声明的本地变量仅作用于当前闭包域,如果不存在这样的一个闭包函数,那么将会创建一个污染全局作用域的全局变量。为了防止这种情况出现,我们可以使用IIFE来创建一个包含有这个本地变量的函数。
(function(){ varfoo= "bar"; console.log(foo); })(); foo;// ReferenceError: foo is not defined
目前的争论是,我们可以使用在ECMA 2015介绍的块级作用域变量来代替IIFE,以达到相同的效果。相比于函数级作用域,let和const关键字声明的本地变量仅作用于当前所处的”块”级域。
{ let foo= "bar"; console.log(foo); } foo;// ReferenceError: foo is not defined
然而,块级作用域变量不是立即函数执行表达式的替代品。确实,如果支持ECMA 2015,let和const能够用来限制本地变量只在包含它的块级作用域内使用。
如果,你在不支持ECMA 2015的环境(例如一些旧的浏览器)中执行你的Java代码。
本文共计1325个文字,预计阅读时间需要6分钟。
前言,最近,我写了一篇关于Java IIFE模式语法文章,来解释为什么我们用现在的方式来写立即执行函数表达式。少数读者批评论文过时了,都在争论ECMA 2015中引入的块级作用域。
前言
最近,我写了一篇关于syntax of Java's IIFE pattern的文章,来解释为什么我们用现在的方式来写立即执行函数表达式。少数的读者批评文章过时了,都在争论在ECMA 2015中介绍的块级作用域变量使IIFE变得过时了。
恰恰相反,立即执行函数表达式一点也没有过时!因为这个理由,我决定写这篇后续文章来介绍一些立即执行函数表达式的常见用法。注意以下的列表是不完整的,所以如果你喜欢的用法没有在文章出现,希望你不要有什么不好的感觉。
函数作用域 VS 块级作用域
通过var关键字声明的本地变量仅作用于当前闭包域,如果不存在这样的一个闭包函数,那么将会创建一个污染全局作用域的全局变量。为了防止这种情况出现,我们可以使用IIFE来创建一个包含有这个本地变量的函数。
(function(){ varfoo= "bar"; console.log(foo); })(); foo;// ReferenceError: foo is not defined
目前的争论是,我们可以使用在ECMA 2015介绍的块级作用域变量来代替IIFE,以达到相同的效果。相比于函数级作用域,let和const关键字声明的本地变量仅作用于当前所处的”块”级域。
{ let foo= "bar"; console.log(foo); } foo;// ReferenceError: foo is not defined
然而,块级作用域变量不是立即函数执行表达式的替代品。确实,如果支持ECMA 2015,let和const能够用来限制本地变量只在包含它的块级作用域内使用。
如果,你在不支持ECMA 2015的环境(例如一些旧的浏览器)中执行你的Java代码。

