Javascript 在if语句内部或外部声明变量更好吗?
我正在清理一些Javascript代码,这些代码计算有多少人从分配给下载它的代码中下载了一些东西。我遇到了这样一个简单的说法:Javascript 在if语句内部或外部声明变量更好吗?,javascript,optimization,coding-style,Javascript,Optimization,Coding Style,我正在清理一些Javascript代码,这些代码计算有多少人从分配给下载它的代码中下载了一些东西。我遇到了这样一个简单的说法: var percent_downloads = 0; if (users_assigned != 0) { percent_downloads = total_downloads / users_assigned; } 我正在考虑重写代码,以便在if-else语句中声明变量,如下所示: if (users_assigned != 0) { var per
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范围的众所周知的技术警告。不过,此评论太长,无法发表评论 在本例中,我将使用一个三元组,完全跳过这个问题,因为这段代码很短。或者我不去管它,因为重写的时间更长,并且(不一定)添加了太多的上下文(但请参见下面关于更长函数的内容) 在适当的短时间内,我不认为这很重要。在函数顶部声明变量的原因是,不管怎样,变量的声明就是在这里结束的,它避免了关于范围规则和初始化点的任何混淆
在较长的函数中,您必须扫描(读:想得太多)声明,确保范围健全,并确保在初始化变量之前(在本代码段中)没有意外引用该变量。这是基于观点的,关于JavaScript范围的众所周知的技术警告。不过,此评论太长,无法发表评论 在本例中,我将使用一个三元组,完全跳过这个问题,因为这段代码很短。或者我不去管它,因为重写的时间更长,并且(不一定)添加了太多的上下文(但请参见下面关于更长函数的内容) 在适当的短时间内,我不认为这很重要。在函数顶部声明变量的原因是,不管怎样,变量的声明就是在这里结束的,它避免了关于范围规则和初始化点的任何混淆
在较长的函数中,您必须扫描(读:想得太多)声明,确保范围健全,并确保在初始化变量之前(在本代码段中)没有意外引用该变量。这是基于观点的,关于JavaScript范围的众所周知的技术警告。不过,此评论太长,无法发表评论 在本例中,我将使用一个三元组,完全跳过这个问题,因为这段代码很短。或者我不去管它,因为重写的时间更长,并且(不一定)添加了太多的上下文(但请参见下面关于更长函数的内容) 在适当的短时间内,我不认为这很重要。在函数顶部声明变量的原因是,不管怎样,变量的声明就是在这里结束的,它避免了关于范围规则和初始化点的任何混淆
在较长的函数中,您必须扫描(读:想得太多)声明,确保范围健全,并确保在初始化变量之前(在本代码段中)没有意外引用该变量。这是基于观点的,关于JavaScript范围的众所周知的技术警告。不过,此评论太长,无法发表评论 在本例中,我将使用一个三元组,完全跳过这个问题,因为这段代码很短。或者我不去管它,因为重写的时间更长,并且(不一定)添加了太多的上下文(但请参见下面关于更长函数的内容) 在适当的短时间内,我不认为这很重要。在函数顶部声明变量的原因是,不管怎样,变量的声明就是在这里结束的,它避免了关于范围规则和初始化点的任何混淆 在较长的函数中,您必须扫描(读:想得太多)声明,确保范围健全,并确保在初始化变量之前(在本代码段中)没有意外引用该变量。正如@Dave Newton所说,“但此注释对于注释来说太长了。”试着用一种简单的方式来解释它
if (users_assigned != 0) {
var percent_downloads = total_downloads / users_assigned;
} else {
var percent_downloads = 0;
}
JS引擎如何解释它
if (users_assigned != 0) {
var percent_downloads = total_downloads / users_assigned;
} else {
var percent_downloads = 0;
}
下载百分比代码>检查范围,是否存在,如果是,忽略其他创建变量
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
正如@Dave Newton所说,“不过,这条评论太长了。”他试图用一种简单的方式解释它
if (users_assigned != 0) {
var percent_downloads = total_downloads / users_assigned;
} else {
var percent_downloads = 0;
}
JS引擎如何解释它
if (users_assigned != 0) {
var percent_downloads = total_downloads / users_assigned;
} else {
var percent_downloads = 0;
}
下载百分比代码>检查范围,是否存在,如果是,忽略其他创建变量
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
正如@Dave Newton所说,“不过,这条评论太长了。”他试图用一种简单的方式解释它