是在if语句内还是在if语句外声明变量更好呢?
Is it better practice to declare variables inside an if statement or outside?
我正在清理一些Javascript代码,这些代码计算了有多少人下载了一些东西,这些人被分配下载它。我遇到了这个简单的语句:
var percent_downloads = 0;
if (users_assigned != 0) {
percent_downloads = total_downloads / users_assigned;
}
我正在考虑重写代码以在if-else语句中声明变量,如下所示:
if (users_assigned != 0) {
var percent_downloads = total_downloads / users_assigned;
} else {
var percent_downloads = 0;
}
根据这个问题,它们都具有相同的功能,但是哪个是更好的代码?
这是基于意见的,有关于JavaScript作用域的众所周知的技术警告。不过,这条注释太长了。
在这个的情况下,我将使用三进制,并完全跳过问题,因为这段代码很短。或者我不去管它,因为重写的代码比较长,而且(不一定)没有添加太多的上下文(但是关于更长的函数,请参见下文)。在一个适当简短的函数中,我不认为它很重要。在函数的顶部声明变量的原因是,无论如何,这就是它们的声明结束的地方,它避免了关于作用域规则和初始化点的任何混淆。
在较长的函数中,您必须扫描(读:考虑太多)声明,确保范围合理,并确保在初始化(在此代码片段中)之前不会意外引用变量
正如@Dave Newton所说,"这条评论太长了,不适合评论。"试着用简单的方式解释
JavaScript没有块作用域的功能。Ref
在执行代码的任何部分之前,首先处理所有声明,包括变量和函数。Hoisting-Ref
if (users_assigned != 0) {
var percent_downloads = total_downloads / users_assigned;
} else {
var percent_downloads = 0;
}
JS引擎如何解释
found: a variable
percent_downloads;
检查作用域,是否存在,如果是忽略否则创建变量。查看更多ref:嵌套作用域执行:代码
最后代码被执行为:
if (users_assigned != 0) {
percent_downloads = total_downloads / users_assigned;
} else {
percent_downloads = 0;
}
所以,它们的功能是一样的。
另一个例子,请检查代码中的注释,以便更好地理解
案例1
var foo = true;
console.log(bar)//found a variable not declared yet - create&set value as undefined
if (foo) {
var bar = foo * 2; //already declared set new value
console.log( bar ); //print new value
}
console.log( bar ); //print new value
//output
//undefined
//2
//2
案例2
var foo = false;
console.log(bar)//found a variable not declared yet - create&set value as undefined
if (foo) {
var bar = foo * 2; //code skipped - value is undefined
console.log( bar ); //code skipped - value is undefined
}
console.log( bar ); //value is undefined
//output
//undefined
//undefined
//undefined
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 如何在 API 调用后和 if 语句中启用提交按钮
- 带有多个elseif的Javascript if语句
- Sharepoint JScript if语句未执行
- Javascript:If-then语句在函数中不起作用
- for循环中的javascript if语句找不到==
- jquery if语句返回return wong语句
- 在if语句下的html中使用javascript变量
- 将错误与if语句混淆
- 如何检查if/else语句中的随机条件
- 循环通过数组的If语句不起作用
- jQuery模板中的If语句
- 如何从数据库中回显If语句
- 如何减少if语句的数量
- Node.js-承诺和锥形语句(if、switch等)-如何构建
- 如何在嵌套ng重复指令中使用控制语句(if语句)
- 如何创建语句if包含"&"
- If语句- If主体有一个类remove在滚动原生javascript
- Javascript中的if语句- if - else问题