我知道JavaSript没有块级作用域,所以JShint为什么会抛出此错误:
变量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!'));
}
}
如果没有else statemenet,它将识别变量,并且代码可以正常工作。
最佳答案
在这种情况下,JSHint完全正确。考虑一下您的代码:warning
在哪里声明和初始化?如果代码将其放在else
子句中,那么warning
将如何具有值?
将var
声明和初始化移出if
块:
function x(){
var warning = document.createElement('p');
if (y<allQuestions.length && document.getElementById('warning')<1) {
请记住,变量声明被提升到函数的顶部,但变量初始化没有。因此,您的原始代码等效于:
function x(){
var warning;
if (y<allQuestions.length && document.getElementById('warning')<1) {
warning = document.createElement('p');
// ...
关于javascript - 执行上下文困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26716409/