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
.
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
.