为什么在DOM事件触发之前声明命名函数?

时间:2015-02-14 20:32:15

标签: javascript

我正在阅读Jon Duckett的书" Javascript和jQuery。"在关于事件监听器的部分中,他说:

如果在事件触发所选DOM节点时使用命名函数,请首先编写该函数。 (您也可以使用匿名函数)

并使用此代码进行跟进:

function checkUsername() {
  var elMsg = document.getElementById('feedback');
  if (this.value.length < 5) {
    elMsg.textContent = 'Username must be 5 characters or more';
  } else {
    elMsg.textContent = '';
  }
}

var elUsername = document.getElementById('username');
elUsername.addEventListener('blur', checkUsername, false);

由于解释器在处理脚本之前要经历并查找所有已命名的函数和变量,为什么函数在传递到addEventListener之前就已经到了?

2 个答案:

答案 0 :(得分:1)

这与功能无关(因为声明已被提升),但在使用它们之前定义事物是一种很好的做法。

答案 1 :(得分:1)

就脚本执行而言并不重要,但它有助于保持一致的可维护性排序,这实际上只是说它使代码更易于阅读和理解。

在JavaScript中,函数和变量声明总是被提升到其包含范围的顶部,因此写入函数的位置无关紧要。

我建议订购:

  1. 指令
  2. 变量声明
  3. 功能声明
  4. 变量实例化
  5. 代码执行
  6. 使用此顺序还允许开发人员轻松地将函数声明切换到变量实例化,例如:

    function foo() {
        ...do stuff...
    }
    

    var foo;
    foo = switch ? function () {
            ...do stuff...
        } : function () {
            ...do other stuff...
        };
    

    并且,它有助于防止在作者错误调整函数或变量的范围时发生愚蠢的错误。