井井客

搜索

let作用域的使用,学到了

var与let的差异知道的大差不差,但是在应用上面。结合之前的闭包使用。没想到可以这样方便啊!

let作用域的使用,学到了

最近两个月除了工作上面忙忙忙以外,有空会再看看JS基础知识,感觉基础还是很薄弱的。最近看的闭包啥啥的,看到let这块的应用,感觉更深了。。。

在一个for循环中,使用闭包的例子,下面这段代码算是经典了。

for(var i = 1; i < 6; i++){
    (function(num){
        setTimeout(function(){
            console.log(num)
        },num*1000)
    })(i)
}

虽然是个小小的例子但是里面涉及好几个专业术语:IIFE、作用域、RHS。

而现在,利用let,使用更简洁明了的代码:

for(let i = 1; i < 6; i++){
    setTimeout(function(){
        console.log(i)
    },i*1000)
}

为什么最上面那段代码使用到了IIFE呢?因为如果不使用的话结果就不是我们预期的了,他会输出5个6。

主要是因为setTimeout是在for循环后执行的。而通过LHS查询,它每一次查找到的是全局的变量i,而循环结束时i停留在了6,所以每次输入的都是6了。

为什么下面这段代码可以直接写呢?

因为就像上面说的,LHS查询到了i,但是用let定义的i它并不是全局的,它只在每次循环的{..}中,所以每次在{..}中的setTimeout取到的这个i都是不一样的。

是不是隐隐知道了什么呢?个人理解,不正确的欢迎拍砖~

文章TAG:JS

作者:井井客原创来源:原创
本文标题:let作用域的使用,学到了
本文链接:/c/23315.html

上一篇:【VUE】做个dialog组件最简实例
下一篇:sass编译命令

文章分类

相关阅读

随便看看