js循环中闭包的变量访问问题

发布于 2022-09-01 15:33:15 字数 196 浏览 22 评论 0

var str = "abcdefgabcdefg"
for(var i = 0;i<str.length;i++){
    (function(i){
        var str = str;
        console.log(str)
    })(i)   
}


//-->全部都是undefinded 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

马蹄踏│碎落叶 2022-09-08 15:33:15

有个答案有错误,这里的IIFE并不会隔断作用域链,相反会延长作用域链,IIFE也同时拥有对上级作用域的访问权限。
至于为什么undefined,是因为var str = str;语句中。str变量在javascript引擎解析被提升(hosting)到当前作用域的顶端

(function(i){
    var str = str;
})

等同

 (function(i){
       var str;
       str = str;
 })

这里有篇详细的文章。
javascript变量提升

就像其中答案所说的
你的代码等同于
var str = "abcdefgabcdefg"
for(var i = 0;i<str.length;i++){
    (function(i){
        var str;
        str = str;
        console.log(str);
    })(i)   
}
天荒地未老 2022-09-08 15:33:15

你的代码相当于

javascriptvar str = "abcdefgabcdefg"
for(var i = 0;i<str.length;i++){
    (function(i){
        var str;
        str = str;
        console.log(str);
    })(i)   
}

所以这种情况下不要和外部变量同名

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文