Maison  >  Questions et réponses  >  le corps du texte

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

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


//-->全部都是undefinded 
PHP中文网PHP中文网2750 Il y a quelques jours349

répondre à tous(2)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-04-10 15:35:54

    有个答案有错误,这里的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)   
    }
    

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-10 15:35:54

    你的代码相当于

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

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

    répondre
    0
  • Annulerrépondre