我一直在使用JSLint让我对我的JavaScript感到不好.顺便说一下,它很棒.有一张我不太明白的支票,请你的意见.
来自jslint.com:
在具有块范围的语言中,通常建议在首次使用的站点声明变量.但是因为JavaScript没有块范围,所以在函数顶部声明所有函数的变量是明智的.建议每个函数使用一个var语句.
大胆的最后一个意思是什么?我想我应该声明这样的多个变量?
var foo = 1, bar = 2;
Run Code Online (Sandbox Code Playgroud)
并且,"智慧"部分只是一种编程风格,可以阻止错误,或者还有更多的错误吗?
谢谢你的帮助.
Bre*_*ton 72
问题是,无论你是否意识到,javascript都会无形地将所有var声明移动到函数作用域的顶部.
所以,如果你有这样的功能
var i = 5;
function testvar () {
alert(i);
var i=3;
}
testvar();
Run Code Online (Sandbox Code Playgroud)
警报窗口将包含undefined.因为在内部,它已被改为:
var i = 5;
function testvar () {
var i;
alert(i);
i=3;
}
testvar();
Run Code Online (Sandbox Code Playgroud)
这被称为"吊装".crockford如此强烈主张var声明的原因在于它使得代码明显与它将要做的事情相匹配,而不是允许发生隐形和意外行为.
基本上在JavaScript blocks({ ... }
)中不引入新范围,只有函数范围,因此不会在任何其他语句上创建范围.
函数中任何位置引入的变量在函数中的任何位置都可见.
例如:
function myFunction(){
var one = 1;
if (one){
var two = one + 1;
}
(function () {
var three = one + two;
})();
// at this point both variables *one* and *two* are accessible but
// the variable *three* was declared in the scope of a inner function
// and is not accessible at this point.
}
Run Code Online (Sandbox Code Playgroud)
在具有块作用域的语言中,建议在首次使用时声明变量,但由于JavaScript没有块作用域,因此最好在函数顶部声明所有函数的变量.
看看这篇文章.
块范围的缺乏解释了以下代码:
var a = 1;
if (something) {
var a = 2;
}
alert(a); // Alerts "2"
Run Code Online (Sandbox Code Playgroud)
在大多数C风格(如语法)语言中,var a = 2
定义仅为if
块的范围定义"a" .在函数顶部使用单个var语句有助于避免这种Javascript的怪癖,这并不总是如上所述,并且对于C/C#/ Java程序员来说是意料之外的.
归档时间: |
|
查看次数: |
7187 次 |
最近记录: |