Ert*_*ohl 2 javascript function-pointers
所以,假设我有一大堆元素,我想要附加事件监听器.例如,我希望每行在单击时变为红色的表格.
所以我的问题是哪一个是最快的,哪个使用最少的内存.我明白这是(通常)权衡,所以我想知道每个人的最佳选择.
使用表示例,假设有一个所有行元素的列表,"rowList":
选项1:
for(var r in rowList){
rowList[r].onclick = function(){ this.style.backgroundColor = "red" };
}
Run Code Online (Sandbox Code Playgroud)
我的直觉是这是最快的,因为只有少一个指针调用,但是内存最多,因为每个行列表都有自己的函数副本,如果onclick函数很大,这可能会很严重.
选项2:
function turnRed(){
this.style.backgroundColor = "red";
}
for(var r in rowList){
rowList[r].onclick = turnRed;
}
Run Code Online (Sandbox Code Playgroud)
我猜这将比上面的那个慢一点(哦不,再多一个指针取消引用!)但内存密集程度要低得多,因为浏览器只需要跟踪函数的一个副本.
选项3:
var turnRed = function(){
this.style.backgroundColor = "red";
}
for(var r in rowList){
rowList[r].onclick = turnRed;
}
Run Code Online (Sandbox Code Playgroud)
我认为这与选项2相同,但我只是想把它扔出去.对于那些想知道这和选项2之间的区别是什么:定义函数的JavaScript差异
奖金部分:Jquery
同样的问题:
$('tr').click(function(){this.style.backgroundColor = "red"});
Run Code Online (Sandbox Code Playgroud)
与:
function turnRed(){this.style.backgroundColor = "red"};
$('tr').click(turnRed);
Run Code Online (Sandbox Code Playgroud)
和:
var turnRed = function(){this.style.backgroundColor = "red"};
$('tr').click(turnRed);
Run Code Online (Sandbox Code Playgroud)