为什么要在DOM事件触发之前声明命名函数
Why declare named function before DOM event fires?
我正在读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);
既然解释器要在is处理脚本之前遍历并查找所有命名的函数和变量,那么为什么函数在传递到addEventListener之前就出现了呢?
就脚本执行而言,这并不重要,但它有助于保持一致的可维护性顺序,这实际上只是一种说法,它使代码更容易阅读和理解。
在JavaScript中,函数和变量声明总是被提升到其包含范围的顶部,所以函数写在哪里并不重要。
我建议订购:
- 指令
- 变量声明
- 函数声明
- 变量实例化
- 代码执行
使用此顺序还允许开发人员轻松地将函数声明转换为变量实例化,例如:
function foo() {
...do stuff...
}
至
var foo;
foo = switch ? function () {
...do stuff...
} : function () {
...do other stuff...
};
而且,它有助于防止作者错误地定义函数或变量的范围时出现愚蠢的错误。
这对功能来说并不重要(因为声明是挂起的),但在使用它们之前定义它们是一种很好的做法。
相关文章:
- Eval未声明函数
- JavaScript + mocha:可能是在 for 循环中声明函数的闭包问题
- 使用 .on 函数运行 jQuery 声明函数
- 返回并重新声明函数中的变量
- SyntaxError:严格模式不允许在词法嵌套语句中声明函数
- JavaScript函数的类型是在声明函数之前定义的
- 在 initComponent Ext JS4 中声明函数
- 在对象中声明函数名称,为什么
- 在变量中声明函数的不同方法
- 声明函数是否会创建具有函数名称和分配给它的函数对象的变量
- 在 angularjs 控制器范围内声明函数和属性,但不附加到$scope
- 在声明函数中使用“this”时严格违规,函数表达式不违规
- 只有从html set onclick事件调用代码声明函数时,该函数才不存在
- 在jQuery中动态声明函数
- 声明函数并在jquery事件绑定上调用它
- 在Javascript中声明函数的最有效方法是什么
- javascript声明函数超时
- Javascript:动态声明函数的正确方法
- 为闭包声明函数两次
- 习语Javascript编码风格-何时在原型上声明函数,何时在函数构造函数内声明函数