jQuery使用每个函数内部的值

时间:2018-04-07 23:17:20

标签: javascript jquery

我在下面编写的代码有效,但是在函数完成后我没有定义我在每个函数中命名的变量。

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!');
}

然而,它说我在每个函数中设置的变量都没有定义,即使我在循环期间在控制台中看到它们。

1 个答案:

答案 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习语中的变量以及污染全局范围。