优化——语句和变量声明
Optimization - For statement and variable declarations
以下是MDN关于'for'语句的引语:
表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。这表达式可以选择性地使用var关键字声明新变量。这些变量不是循环的局部变量,即它们在同一个循环中for循环所在的作用域。该表达式的结果将被丢弃。
所以当我写这样的代码时:
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
// ...
}
}
在外部循环的每次迭代中,我声明变量j,它已经声明了,对吗?
那么这样写是不是更好:
for(var i = 0, j = 0; i < 10; i++) {
for(j = 0; j < 10; j++) {
// ...
}
}
…还是我们不在乎?
这个引号所指的行为被称为提升,这在JavaScript中是很重要的。
MDN是这样解释的:
没有在函数的顶部声明所有变量的原因是,它们的本地化使代码更清晰。因为变量声明(以及一般的声明)是在执行任何代码之前处理,在任何地方声明一个变量在代码中相当于在顶部声明它。这也意味着变量可以在声明之前被使用。这这种行为被称为"提升",因为看起来变量声明被移到函数或全局代码的顶部。
在第一个循环中声明两个变量,绝对没有增益。这只会让人困惑。对于JS引擎来说也是一样的,但是其他读到这段代码的开发人员会想知道为什么j
在一个意想不到的位置声明。
现在,如果您对变量在使用它的循环之前(具有undefined
值)和之后存在这一事实感到不安,请高兴:ES6中有一个新的声明类型:let
,它将变量作用于块。
for(let i = 0; i < 10; i++) {
for(let j = 0; j < 10; j++) {
// ...
}
}
注意let
的兼容性
现在,请使用大家都期待的标准格式:
for(var i = 0; i < 10; i++) {
for(var j = 0; j < 10; j++) {
// ...
}
}
约定,在这种情况下,i
和j
不会在他们的循环。当(且仅在这种情况下)您想在(例如在循环中有一个break)之后使用i
或j
时,请使用:
var i, j;
for(i = 0; i < 10; i++) {
for(j = 0; j < 10; j++) {
// ...
}
}
// use i and j here
相关文章:
- 使用同一对象中的其他变量声明变量
- 用||声明变量
- 使用javascript使用for循环声明变量
- JavaScript-用for循环项声明变量
- try声明变量的作用域
- 有没有一种方法可以使用函数参数的值来声明变量
- 在使用javascript再次声明变量之前,请先清除或删除该变量
- Javascript未声明变量
- 在Javascript中,我可以在声明变量之前使用它吗
- 在html文档的开头声明变量
- 按什么顺序声明变量和函数
- 如何以正确的方式在jQuery中声明变量
- 在 Angular 服务中接收函数的未声明变量
- 字典和声明变量
- 需要一些有关以以下样式声明变量的信息
- 在 jQuery 中使用常量声明变量
- 从外部文件在打字稿中声明变量得到引用错误:..未定义
- JavaScript,声明变量时混淆语法
- 在 javascript 函数和内存管理中声明变量
- Javascript 使用 if 语句声明变量