Javascript 执行上下文混淆
我知道JavaSript没有块级作用域,所以为什么JShint会抛出这个错误: 变量Javascript 执行上下文混淆,javascript,scope,Javascript,Scope,我知道JavaSript没有块级作用域,所以为什么JShint会抛出这个错误: 变量警告可能尚未初始化。 function x(){ if(y<allQuestions.length && document.getElementById('warning')<1) { var warning = document.createElement('p'); warning.id = 'warning'; warning
警告
可能尚未初始化。
function x(){
if(y<allQuestions.length && document.getElementById('warning')<1) {
var warning = document.createElement('p');
warning.id = 'warning';
warning.appendChild(document.createTextNode('Please check an answer!'));
wrapper.appendChild(warning);
setTimeout(function(){
if (document.getElementById('warning')) {
wrapper.removeChild(document.getElementById('warning'));
}
}, 2500);
}else{
//HERE is the problem
warning.appendChild(document.createTextNode('Your response is still worng!'));
}
}
函数x(){
如果(y这是一个JSHint完全正确的情况。想想你的代码:warning
在哪里声明和初始化?如果代码进入else
子句,那么warning
将如何有值
将var
声明和初始化移出if
块:
function x(){
var warning = document.createElement('p');
if (y<allQuestions.length && document.getElementById('warning')<1) {
函数x(){
var warning=document.createElement('p');
if(耶..我明白了!我试图再次声明一个同名的变量,但JShint抛出了“重复声明”错误。与变量主题无关,您可以测试DOM中是否有元素,但这是一种非常奇怪的方法。getElementById()当找不到元素时,函数将返回null
。一个更好的语句是document.getElementById('warning')!=null,对吗?是的,这是一种更典型的方法。
function x(){
var warning;
if (y<allQuestions.length && document.getElementById('warning')<1) {
warning = document.createElement('p');
// ...