我在下面编写的代码有效,但是在函数完成后我没有定义我在每个函数中命名的变量。
jQuery.each($myObject, function(i, val) {
ce = $(this).attr('class');
if (i === 0) {
step1complete = true;
if (/incomplete/i.test(ce)) {
var step1complete = false
}
console.log('step1' + step1complete);
} else if (i === 1) {
step2complete = true
if (/incomplete/i.test(ce)) {
var step2complete = false
}
console.log('step2' + step2complete);
} else if (i === 2) {
step3complete = true
if (/incomplete/i.test(ce)) {
var step3complete = false
}
console.log('step3' + step3complete);
}
});
if (step1complete === true && step2complete == false && step3 == false) {
console.log('Youre Just Starting Out I see');
} else {
console.log('You got one step done now theres more!');
}
然而,它说我在每个函数中设置的变量都没有定义,即使我在循环期间在控制台中看到它们。
答案 0 :(得分:1)
不要使用var
,因为它会将其范围放在所附的函数中。相反,将它们带出来,只需var
部分。
var step1complete;
var step2complete;
var step3complete;
jQuery.each($myObject, function(i, val) {
ce = $(this).attr('class');
if (i === 0) {
step1complete = true;
if (/incomplete/i.test(ce)) {
step1complete = false
}
console.log('step1' + step1complete);
} else if (i === 1) {
step2complete = true
if (/incomplete/i.test(ce)) {
step2complete = false
}
console.log('step2' + step2complete);
} else if (i === 2) {
step3complete = true
if (/incomplete/i.test(ce)) {
step3complete = false
}
console.log('step3' + step3complete);
}
});
if (step1complete === true && step2complete == false && step3 == false) {
console.log('Youre Just Starting Out I see');
} else {
console.log('You got one step done now theres more!');
}
如果您不想污染全局范围,请使用IIFE:
(function () {
var step1complete;
var step2complete;
var step3complete;
jQuery.each($myObject, function(i, val) {
ce = $(this).attr('class');
if (i === 0) {
step1complete = true;
if (/incomplete/i.test(ce)) {
step1complete = false
}
console.log('step1' + step1complete);
} else if (i === 1) {
step2complete = true
if (/incomplete/i.test(ce)) {
step2complete = false
}
console.log('step2' + step2complete);
} else if (i === 2) {
step3complete = true
if (/incomplete/i.test(ce)) {
step3complete = false
}
console.log('step3' + step3complete);
}
});
if (step1complete === true && step2complete == false && step3 == false) {
console.log('Youre Just Starting Out I see');
} else {
console.log('You got one step done now theres more!');
}
})();
<强>定义:强>
IIFE (立即调用函数表达式)是一个JavaScript函数,一旦定义就会运行。它是一种设计模式,也称为自执行匿名函数,包含两个主要部分。第一个是带有词法范围的匿名函数,包含在
Grouping Operator ()
中。这可以防止访问IIFE习语中的变量以及污染全局范围。