在将函数分配给事件之前将函数存储在变量中有什么好处吗?
Is there any benefit in storing a function in a variable before assigning it to an event?
1
document.onkeydown = function(a) {
//
};
阿拉伯数字
var a = function(a) {
//
};
document.onkeydown = a;
我的想法是,也许在第一种情况下,每次事件发生时都需要重新解析该函数(因为缺乏更好的词),而在第二种情况下,它只指向已经解析的函数。
如果不是这个,也许还有另一个(任何)区别。
更新
如果我理解正确,它们之间存在差异,最好使用第二个。
1
var a = window.onresize = function() {
//
};
// ...
a();
阿拉伯数字
var a = function() {
//
};
window.onresize = a;
// ...
a();
在您当前的形式中,没有区别(匿名函数甚至可能更快一点)。单独存储函数的唯一优点是当您在循环中执行此操作时(或者如果函数可能有其他用途)。
例如:
var elements = document.getElementsByTagName('input');
for ( var i = 0; i < elements.length; i++ ) {
element[i].onkeydown = function () {
// whatever
}
}
每个元素都将获得自己的函数副本,这会增加页面的内存使用量。
如果改为将函数存储在循环外部:
var elements = document.getElementsByTagName('input');
var eventListener = function () {
// whatever
};
for ( var i = 0; i < elements.length; i++ ) {
element[i].onkeydown = eventListener;
}
它们都将共享相同的功能。
附言正如@VisioN所指出的,更好的方法是使用 addEventListener
.同样的规则也适用于那里。
相关文章:
- 基于窗口宽度jquery的函数的替代方法是什么
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- 在什么情况下需要同时使用compile&链接函数的角度
- 当一个重要的构造函数参数丢失时应该发生什么
- 当绑定到AngularJS中的函数时,会在后台发生什么
- 缓存!saveLocations()和addLocation()函数有什么区别
- 函数(i,val)在javascript中是什么意思
- 鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
- 如果 JS 中的函数是一流的,那么在定义它们之前允许调用它们是什么
- undercore.js_.tap()函数什么是方法链
- 淘汰抛出消息:类型错误:
不是一个函数.什么意思 - JavaScript 函数什么是范围以及为什么使用 $
- jQueryAJAX函数什么都没做
- 用".then"链接bluebird中的异步函数.什么是最好的方法
- 为什么这个函数什么也不返回?
- 将参数传递给函数.什么'It’他错了
- 我有节点JS错误的日期函数什么地方出了问题