javascript - js闭包问题求助

查看:96
本文介绍了javascript - js闭包问题求助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题


var a = [];
        for(var i = 0; i < 10; i++) {
            a[i] = (function(j) {
                return function() {
                    console.log(j)
                }
            })(i)
        }
        a[6]()

对于这个 我有点不理解 这样写是对的


var a = [];
        for(var i = 0; i < 10; i++) {
            a[i] = function() {
                console.log(i)
            }
        }
        a[6]()

这样写会是10 是什么原因啊 求讲一下原理 是不是因为这个函数没有立即执行 然后最后循环结束了 这个函数才被执行 然后就成为10了?

解决方案

先来说第二段为什么不对。

你应该知道js里变量的作用域的,for循环里面的匿名函数里面引用的i,相当于就是一个全局变量,循环结束之后的值是10,所以接下来无论你调用a几都是输出10,因为i只有一个在那里。


再说第一个为什么正确

同样i还是相当于全局变量只有一个,但是在for循环里,通过一个立即执行的函数(参数j的那个函数)返回了一个新的function,同时这个新的function会输出j的值。因为参数j是局部变量啊,每次循环都是新的function不会互相影响,所以能正常输出。


有点难措辞。

这篇关于javascript - js闭包问题求助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆