Javascript 为什么我不能访问我喜欢的var?我如何解决它?

Javascript 为什么我不能访问我喜欢的var?我如何解决它?,javascript,Javascript,我只是在摆弄,只是想知道是否有可能在这个循环中以某种方式访问I变量 var string = 'abcdefghij'; for(var i = 0; i < 10; i++){ window[string[i]] = function(){ console.log(i); }; } a(); var字符串='abcdefghij'; 对于(变量i=0;i

我只是在摆弄,只是想知道是否有可能在这个循环中以某种方式访问I变量

var string = 'abcdefghij';
for(var i = 0; i < 10; i++){
    window[string[i]] = function(){
        console.log(i);
    };
}
a();
var字符串='abcdefghij';
对于(变量i=0;i<10;i++){
窗口[字符串[i]]=函数(){
控制台日志(i);
};
}
a();
显然,出于许多原因,我通常不会对全局范围执行此操作,但我想以此为例


是否仍有办法从该函数内部访问
i var

问题是您正在另一个未定义的作用域中调用
i

这还不完全正确:

var字符串='abcdefghij';
对于(变量i=0;i<10;i++){
窗口[字符串[i]]=(函数(i){
返回函数(){
控制台日志(i);
}
})(i) );
}

a()
使用闭包技术,您可以这样做。当我们将“i”的作用域传递给内部函数时,它会立即调用自身

 var string = 'abcdefghij';
 for (var i = 0; i < 10; i++) {
  window[string[i]] = (function(i) {
    return function() {
      console.log(i);
    }
  })(i);
}
a()
var字符串='abcdefghij';
对于(变量i=0;i<10;i++){
窗口[字符串[i]]=(函数(i){
返回函数(){
控制台日志(i);
}
})(i) );
}
()

最好的解决方案是使用而不是
var
。这是一个很好的实践。使用
let
,变量在最近的块范围内定义。因此,它们不会在每次迭代后被覆盖

“严格使用”;
变量字符串='abcdefghij';
for(设i=0;i<10;i++){
窗口[字符串[i]]=函数(){
控制台日志(i);
};
}

a()//0
似乎无法访问a函数。我想我做错了什么。你不能在你的字符串中使用
I
,因为它被循环的
I
覆盖。你将没有它的
功能
。我刚刚尝试了你的代码,它就像一个符咒。干杯,伙计。您通常会建议不要动态创建这样的函数吗?(除了窗口对象之外?)@Puddingboy如果可能的话,在更大的项目中调试会更干净、更容易,以定义正常的函数。但是,如果您对此有一个用例,那么就这样做;)确实
i()
j()
h()不工作。这和不能覆盖这些窗口对象有什么关系吗?你的代码似乎也没有一个正常工作的函数,我同意CodeiSir