Sta*_*bie 11 javascript jslint
以下代码传递JSLint:
var sGreeting = 'hello world';
switch (sGreeting)
{
case 'Hello world!':
var a = 'some a value';
break;
case 'Kamusta mundo!':
var b = 'some b value';
break;
case 'Salut le Monde!':
var c = 'some c value';
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,一旦我将该代码放入函数中,JSLint就会抱怨我应该Combine ... with the previous 'var' statement.遵循JSLint,我将定义可能永远不需要使用的变量.我该如何处理这个问题?这是JSLint错误后面的代码:
function foo()
{
'use strict';
var sGreeting = 'hello world';
switch (sGreeting)
{
case 'Hello world!':
var a = 'some a value';
break;
case 'Kamusta mundo!':
var b = 'some b value';
break;
case 'Salut le Monde!':
var c = 'some c value';
break;
default:
break;
}
}
Error:
Problem at line 9 character 7: Combine this with the previous 'var' statement.
var a = 'some a value';
Problem at line 12 character 7: Combine this with the previous 'var' statement.
var b = 'some b value';
Problem at line 15 character 7: Combine this with the previous 'var' statement.
var c = 'some c value';
Run Code Online (Sandbox Code Playgroud)
ste*_*eax 20
javascript中唯一的范围是功能范围(大括号不提供范围),因此switch语句中的那些变量被提升到函数的顶部.
jslint的建议是:
function foo() {
'use strict';
var a, b, c, sGreeting;
sGreeting = 'hello world';
switch (sGreeting) {
case 'Hello world!':
a = 'some a value';
break;
case 'Kamusta mundo!':
b = 'some b value';
break;
case 'Salut le Monde!':
c = 'some c value';
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
nnn*_*nnn 17
"如果我遵循JSLint,我将定义可能永远不需要使用的变量."
如果按照自己的方式执行操作并忽略JSLint,您仍然会定义可能永远不会使用的变量.
这样做的原因是JavaScript将var函数内部的所有声明视为它们发生在函数顶部,即使您认为您在某些条件逻辑中声明变量(例如在特定内部 case(if或者for或者其他内部)) ).这被称为"吊装".然后,实际值将分配给您执行任务的代码中的变量.也就是说,"已提升"变量最初会获得一个未定义的值,然后在代码中您var a = "something";将获得该值的位置.
因此,正如其他答案所述,您可以通过在函数顶部声明变量(逗号用单个var语句分隔)来获取代码以传递JSLint ,然后在您喜欢的任何位置分配值.
| 归档时间: |
|
| 查看次数: |
8856 次 |
| 最近记录: |