use*_*333 51 javascript jshint
我有这个代码:
if ( something is true ) {
var someVar = true;
} else {
var someVar = false;
}
Run Code Online (Sandbox Code Playgroud)
JsHint在else语句部分说"someVar已定义".为什么这样,我该如何解决?
谢谢
Aln*_*tak 72
JS变量没有块范围,它们具有"功能"范围(或者有时是全局的).
声明(但不是赋值)被"提升"到函数的顶部.
jshint警告你有两个这样的声明 - 你的代码相当于:
var someVar;
var someVar; // warning!
if (something) {
someVar = true;
} else {
someVar = false;
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*son 20
这是由于吊装.
在javascript中,无论您在何处定义新变量var
,它都会将其移动到您所在函数的顶部.您的代码在函数顶部的if块上方生成以下内容:
var someVar;
var someVar;
Run Code Online (Sandbox Code Playgroud)
这是一个解释吊装的教程:
http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/
Poi*_*nty 10
你不应该var
在这些地方放置声明.将var
声明放在之前if
,然后将"someVar"设置为一个值.
的确,在这里你根本不需要if
陈述:
var someVar = !!(something);
Run Code Online (Sandbox Code Playgroud)
会做同样的事情.(双重应用!
确保"someVar"设置为true
或者false
,基于"真实性" something
.)
归档时间: |
|
查看次数: |
12239 次 |
最近记录: |