Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 优化-用于语句和变量声明_Javascript_Loops_Scope - Fatal编程技术网

Javascript 优化-用于语句和变量声明

Javascript 优化-用于语句和变量声明,javascript,loops,scope,Javascript,Loops,Scope,以下是关于“for”声明的引文: 表达式(包括赋值表达式)或变量 宣言。通常用于初始化计数器变量。这 表达式可以选择使用var关键字声明新变量。 这些变量不是循环的局部变量,即它们在同一个循环中 循环的作用域在中。此表达式的结果将被丢弃 因此,当我编写这种代码时: for(var i = 0; i < 10; i++) { for(var j = 0; j < 10; j++) { // ... } } for(变量i=0;i

以下是关于“for”声明的引文:

表达式(包括赋值表达式)或变量 宣言。通常用于初始化计数器变量。这 表达式可以选择使用var关键字声明新变量。 这些变量不是循环的局部变量,即它们在同一个循环中 循环的作用域在中。此表达式的结果将被丢弃

因此,当我编写这种代码时:

for(var i = 0; i < 10; i++) {
    for(var j = 0; j < 10; j++) {
        // ...
    }
}
for(变量i=0;i<10;i++){
对于(var j=0;j<10;j++){
// ...
}
}
在外循环的每次迭代中,我都声明变量j,它已经声明正确了吗

那么,这样写是否更好:

for(var i = 0, j = 0; i < 10; i++) {
    for(j = 0; j < 10; j++) {
        // ...
    }
}
for(变量i=0,j=0;i<10;i++){
对于(j=0;j<10;j++){
// ...
}
}

。。。或者我们不在乎?

此引用所指的行为称为提升,在JavaScript中需要了解

以下是方法:

因为变量声明(以及一般的声明)是 在执行任何代码之前处理,在任何地方声明变量 在代码中,这相当于在顶部声明它。这也意味着 一个变量在声明之前可以被使用。这 行为称为“提升”,因为变量 声明移动到函数或全局代码的顶部

之所以不在函数顶部声明所有变量,是因为它们的本地化使代码更清晰

在第一个循环中声明两个变量绝对没有好处。这只会让人困惑。JS引擎也是如此,但是阅读这段代码的其他开发人员会想知道为什么
j
声明在一个意外的位置

现在,如果您对变量在使用它的循环之前(带有一个未定义的
值)和之后存在的事实感到不安,那么请高兴:ES6附带了一个新的声明类型:
let
,它将变量的范围限定到块

for(let i = 0; i < 10; i++) {
    for(let j = 0; j < 10; j++) {
        // ...
    }
}
在这种情况下,惯例是,
i
j
将不会在 他们的循环。当(并且仅在这种情况下)要在之后使用
i
j
时(例如,循环中有一个中断),请使用以下命令:

var i, j;
for(i = 0; i < 10; i++) {
    for(j = 0; j < 10; j++) {
        // ...
    }
}
// use i and j here
vari,j;
对于(i=0;i<10;i++){
对于(j=0;j<10;j++){
// ...
}
}
//在这里使用i和j

只要在同一个函数范围内声明它,就无所谓了。如果您在for循环中声明它,那么它有助于显示您只在for循环中使用它的意图。所以我会选择选项1。有两个连续的,不是嵌套的循环怎么样?在这些函数中,我通常在函数的开头声明一次I变量cases@Pablo我个人非常喜欢重复
var
语句,即使它没有用:它更清晰,而且在有人重构和移动第一个循环的那一天就可以防止bug。但请注意,在这种情况下,有些linter会感到困惑。我正在这样做,但我开始使用JShint,它抱怨到处都有重复的声明。。。尽管如此,我每次都重置变量以避免该错误
var i, j;
for(i = 0; i < 10; i++) {
    for(j = 0; j < 10; j++) {
        // ...
    }
}
// use i and j here