javascript如何在循环内创建变量

Rod*_*igo 3 javascript variables

var i,j;
for (i=0; i<30; i++) {
    for (j=0; j<10; j++) {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

for (var i=0; i<30; i++) {
    for (var j=0; j<10; j++) {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

由于javascript的范围逻辑,第二种方式创建并销毁了j次30次?我更喜欢使用第一种方式,但我不知道是否存在差异.在那儿?

the*_*eye 14

不,JavaScript会提升变量声明.因此,所有变量声明都会定义到定义它们的函数的顶部.因此,所有这些变量只创建一次,并且每次在循环中更改它们的值.


wmo*_*ock 6

@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
Run Code Online (Sandbox Code Playgroud)

可变吊装

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


小智 5

你的两个版本都是平等的.没有区别.变量j不会被创建和销毁30次.