javascript 如何在循环内创建变量

how does javascript create variable inside loop

var i,j;
for (i=0; i<30; i++) {
    for (j=0; j<10; j++) {
        // do something
    }
}

对比

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

由于javascript的范围逻辑,第二种方式创建和销毁j 30次?我更喜欢使用第一种方式,但我真的不知道是否有区别。有吗?

没有。 JavaScripthoists the variable declarations。因此,所有变量声明都位于定义它们的函数的顶部。因此,所有这些变量只创建一次,并且每次在循环中更改它们的值。

你的两个版本是一样的。没有区别。变量j不会被创建和销毁30次。

@thefourtheye 和@Remigius Kijok 的回答都是正确的。每当在函数内(或全局范围内)声明和初始化变量时,声明就会被提升到该范围的顶部。

您可以通过将任一 for 循环包装在函数中然后在浏览器中执行该函数来亲眼看到这一点。具体来说,通过在函数顶部设置一个断点,您将能够看到所有变量都在函数执行之前用值 undefined 声明和初始化。

var loopy = function () {
  for (var i = 0; i < 5; i += 1) {
    for (var j = 0; j < 3; j += 1) {
      console.log('i is ' + i + ' and j is ' + j);
    }
  }
};

loopy(); // place break point here

正如你在照片中看到的,我正在使用 Chrome 的开发工具并在 loopy() 的执行上放置一个断点。进入函数后,但在执行任何 for 循环之前,变量 i 和 j 都已声明,但 undefined.