匿名函数闭包模仿块级作用域,轻松解决开发中的两大难题

匿名函数闭包模仿块级作用域

一、引言

首先,还没有了解过作用域链闭包的小伙伴可以点击下面三篇文章进行学习一下,方便对本文内容的理解。

二、什么是块级作用域

在例如Java 、C++等语言中,一个 for循环语句中定义了一个变量 i ,那么该变量就只属于这个 for循环语句块中,即循环结束后,自动销毁该语句块中定义的变量。这个 for循环语句形成的一个作用域就叫做块级作用域

了解过作用域链就能知道,在JavaScript中能形成作用域的就只有函数以及全局。 例如下列这个例子

`function input() {
    for(var i=0; i < 10; i++) {
        console.log(i)
    }
    
    alert(i)                //返回10
}` 

*   1
*   2
*   3
*   4
*   5
*   6
*   7

我们可以看到,如果 for语句能形成块级作用域,那么 alert(i) 就应该会报错,但最后却成功返回了一个值,说明 for循环是无法形成块级作用域的。

三、如何模仿块级作用域

上文也说了,JavaScript中函数可以形成一个单独的作用域,所以我们就可以通过定义一个匿名函数并进行自调用的方式来模拟出一个块级作用域来。

看一下上述例子改造后是什么样子的

function input() {
    (function () {
        for(var i=0; i < 10; i++) {
            console.log(i)
        }
    })();
    

    alert(i)                //报错: i is not defined
}

input()

你可能感兴趣的:(javascript)