Javascript 在for循环之外声明一个变量(var i=0)有帮助吗?

Javascript 在for循环之外声明一个变量(var i=0)有帮助吗?,javascript,for-loop,Javascript,For Loop,可能重复: 所以..我看到很多文章说我们应该使用下面的风格 var i; for(i=0;i <= 10; i++) { // do something here } vari; 对于(i=0;i两者之间没有显著差异——纯粹是意见问题。两者之间没有显著差异——纯粹是意见问题 都一样 之所以这样做,是因为在JS中,实践是确保在函数顶部的一个位置声明变量。明确地说,这是因为没有块作用域以及潜在的范围链解析错误。 错误不会来自于声明var,而是因为忘记了,并且依赖于block scope

可能重复:

所以..我看到很多文章说我们应该使用下面的风格

var i;
for(i=0;i <= 10; i++) {
  // do something here
}
vari;

对于(i=0;i两者之间没有显著差异——纯粹是意见问题。

两者之间没有显著差异——纯粹是意见问题

  • 都一样
  • 之所以这样做,是因为在JS中,实践是确保在函数顶部的一个位置声明变量。明确地说,这是因为没有块作用域以及潜在的范围链解析错误。
    错误不会来自于声明
    var
    ,而是因为忘记了,并且依赖于block scope来支持您(它不支持,因为它不存在)
  • 都一样
  • 之所以这样做,是因为在JS中,实践是确保在函数顶部的一个位置声明变量。明确地说,这是因为没有块作用域以及潜在的范围链解析错误。
    错误不会来自于声明
    var
    ,而是因为忘记了,并且依赖于block scope来支持您(它不支持,因为它不存在)

  • 如果出于某种原因(不应该是这种情况),您在函数上下文之外以相同的名称声明了一个全局变量,则会产生不同

    var i='global';
    功能测试(){
    警报(一);
    对于(变量i=0;i<10;i++){
    //做点什么
    }
    }
    test();
    
    在上面的示例中,您会注意到警报返回“undefined”。这是因为变量定义被提升到函数的顶部(无论它们在函数中声明在何处)。因此,实际上,上面的解释是:

    var i='global';
    功能测试(){
    var i;
    警报(一);
    对于(i=0;i<10;i++){
    //做点什么
    }
    }
    test();
    
    因此,警报“未定义”。最终,将变量声明放在函数顶部的唯一原因是减少这种潜在的混淆。

    如果出于某种原因(不应该是这种情况),您在函数上下文之外以相同的名称声明了一个全局变量,则会产生不同

    var i='global';
    功能测试(){
    警报(一);
    对于(变量i=0;i<10;i++){
    //做点什么
    }
    }
    test();
    
    在上面的示例中,您会注意到警报返回“undefined”。这是因为变量定义被提升到函数的顶部(无论它们在函数中声明在何处)。因此,实际上,上面的解释是:

    var i='global';
    功能测试(){
    var i;
    警报(一);
    对于(i=0;i<10;i++){
    //做点什么
    }
    }
    test();
    
    因此,警报“未定义”。最终,将变量声明放在函数顶部的唯一原因是减少这种潜在的混淆。

    类似于:Na,这只是个人风格。一些人喜欢通过在代码开头声明所有内容来明确变量提升。类似于:Na,这只是个人风格。一些人喜欢通过在代码开头声明所有内容来明确变量提升。
    for(var i=0; i<=10; i++) {
    
    }
    
    var i = 'global'; 
    
    function test(){
        alert(i);   
        for(var i = 0; i < 10; i++){
         //do something   
        }
    }
    test(); 
    
    var i = 'global'; 
    
    function test(){
        var i; 
        alert(i);   
        for(i = 0; i < 10; i++){
         //do something   
        }
    }
    test();