尽管局部变量在变化,但全局变量的值没有变化

时间:2018-12-27 12:20:37

标签: javascript ecmascript-6

通过输入不同的值来更改全局变量currentLength的值。全局变量currentLength的值必须等于输入中的当前值。

输入数字120,alert应该有效,它不起作用,这意味着未重新定义全局变量的值。

function getCurrentLength() {
  let currentLength = 0;
  let output = document.getElementById('output');

  calcLength();

  function calcLength() {
    let total = +output.value;
    let len = document.getElementsByClassName('len');
    for (let i = 0; i < len.length; i++) {
      len[i].addEventListener('input', function() {
        let value = 0;
        currentLength = +len[i].value;
        for (let j = 0; j < len.length; j++) {
          let num = +len[j].value || 0;
          value += num;
        }
        output.value = total + value;
      })
    }
  }

  if (currentLength === 120) {
    alert(currentLength)
  }
}
getCurrentLength();
<input type="text" placeholder="length" class="len">
<input type="text" placeholder="length" class="len">
<input type="text" placeholder="length" class="len">
<input type="text" placeholder="length" class="len">
<input type="text" placeholder="length" class="len">
<input type="text" id="output" placeholder="output">

我希望currentLength的值为120,但对于进一步的全局操作,它的s all the time 0, be it alert or just using of currentLength`值却什么也没有。

1 个答案:

答案 0 :(得分:1)

原因很简单:调用currentLength === 120时检查一次getCurrentLength,但那时没有currentLength,因为currentLength仅在输入字段更改。

将您的currentLength === 120支票更改为在事件处理程序中,然后您将获得预期的结果:

// ...
output.value = total + value;
if (currentLength === 120) {
    alert (currentLength);
}
// ...