Chr*_*nte 26 javascript variables
我听说在函数顶部定义变量是一种很好的技术,因此最终不会出现可变的提升问题.这个:
// Beginning of file
function something(){
var a, b, c = 1, d, e;
// Do something
}
// End of file
Run Code Online (Sandbox Code Playgroud)
是一个很好的例子(当然不包括坏的变量名).
我的问题是:这总是最好的方法吗?如果你正在使用很多变量怎么办?他们真的应该只是在一条线上吗?
irc*_*ell 49
我强烈建议让Steve McConnell阅读Code Complete 2.他的论点是你既不应该在一行中声明所有变量,也不应该在例程的顶部声明它们.所以,不要这样做:
function foo() {
var a,
b,
c,
d;
/**
* 20 lines that use a and b
*/
/**
* 10 lines that use c and d
*/
}
Run Code Online (Sandbox Code Playgroud)
相反,您应该将变量声明为接近需要的位置.在上面的代码中,可能如下所示:
function foo() {
var a,
b;
/**
* 20 lines that use a and b
*/
var c,
d;
/**
* 10 lines that use c and d
*/
}
Run Code Online (Sandbox Code Playgroud)
好处是,只需查看上面的声明,您就可以快速了解一段代码所使用的变量.您不需要读取代码来查看设置了哪些变量,只是声明了哪些变量.
不要为编译器或计算机编写代码.写给开发人员.您的代码应尽可能易于阅读,并且需要尽可能少的努力来理解特定的代码段.
小智 29
我不这么认为.
这是我写的方式(忽略名称):
function something(){
var a,
b,
c = 1,
d,
e;
// Do something
}
Run Code Online (Sandbox Code Playgroud)
这只是在上面看起来很愚蠢因为1)名称很糟糕2)变量没有在"声明"中分配 - 大多数代码可以用不可变(一次分配)变量编写,我发现这是为了简化代码.我使用它有多种原因,包括清晰度和格式化更改的阻力(也就是说,我可以更改初始值,添加/或删除声明等,而不会弄乱其他行的格式).
我不这么认为.
例如,以下是我编写循环的方法:
for (var i = 0; i < x; i++) {
var elm = elms[i];
...
}
Run Code Online (Sandbox Code Playgroud)
而且有些人会说"但是这些功能已经被提升到了最重要的位置!" 或者"变量是功能性的!".嗯,的确如此.但是,这使我可以轻松地直观地看到这是一个错误,即使JavaScript引擎无法帮助:
for (var i = 0; i < x; i++) {
var elm = elms[i];
...
}
...
// valid JS but since I consider this construct *invalid*
// I know this is a *bug* in my code
alert(elm);
Run Code Online (Sandbox Code Playgroud)
至于我分配给闭包中捕获的变量时:它取决于.如果变量仅在一个闭包中使用,我通常将它放在正上方.这让我知道它应该只用在那个闭包中.如果变量是共享的(例如self),我将它放在所有适用的闭包之上 - 通常在函数的"变量声明部分"中.这让我知道它有一个"功能范围"(读取:可能用于多个绑定).
要解决"for-each-closure"问题 - 只需学习语言即可.保持变量"声明"接近闭包不会影响到这一点.如果结构不被理解,这其实并不重要,如何代码编写.
我使用这些方法/因为:
快乐的编码.
Ole*_*liv 14
在具有块范围的语言中,通常建议在首次使用的站点声明变量.
但是因为JavaScript没有块范围,所以在函数顶部声明所有函数的变量是明智的.这样你就不会欺骗自己或其他人关于变量的范围.
编辑:许多人同时使用多种语言.JavaScript通常是没有块范围的唯一一个.
这是一个风格问题.不是功能问题.
javascript解析器将采用此代码
function() {
dostuff();
var i = 4;
}
Run Code Online (Sandbox Code Playgroud)
并把它变成:
function() {
var i;
dostuff();
i = 4;
}
Run Code Online (Sandbox Code Playgroud)
至于风格问题.不,谢谢,我以为我们用ANSI C留下了它.
你想要做的是在"范围"的顶部声明函数
如果变量的"范围"是整个函数,则在顶部声明它们.如果"范围"是函数的子集,则在子集的开头声明它们.
将"范围"视为逻辑范围而不是功能范围.
这应该确保最大的可读性.