我正在编写一个js文件,该文件在doc-ready部分中有很多jquery命令,然后在jquery命令中引用了一大堆跟随它的函数。这是一个简短的例子,
//jquery on ready
$(function() {
//misc jquery commands
$('#bzm a').click(function(event) {
event.preventDefault();
});
$('.editable').not('video, img, textarea').click(function(event) {
event.stopPropagation();
loadEditor($(this));
return false;
});
});
//bunch of named functions referenced by jquery commands
function loadEditor(node, link){
event.stopPropagation();
var value = node.text();
if (editObj){
commitEditor(editObj);
}
if (node.not('video, img, textarea')){
$('#textEdit')
.copyCSS(node)
.offset(node.offset())
.css('display', 'block')
.val(node.text());
node.css('color', 'transparent');
}
if(node.is('a') || node.parent().is('a') ){
$('#urlEdit').show();
$('#urlEdit').val(node.attr('href'));
} else {$('#urlEdit').hide();}
editObj = node;
if (link){
$('#urlEdit').select();
}else{
$('#textEdit').select();
}
}
我觉得我已经看到它说命名函数会导致js或类似的东西表现不佳......我能找到的最接近的例子是here。我只是想知道。
答案 0 :(得分:5)
没有。调用命名函数会导致变量查找(如果不是全局则便宜)和函数调用。将命名函数传递给另一个函数只需要进行变量查找。
以下是在方形免费shell中在Chrome上运行的一些微基准测试。用一粒盐来衡量所有基准。
(function () {
function f() { }
var a = [1, 2, 3, 4, 5, 6];
var t0 = Date.now();
for (var i = 100000; --i >= 0;) { a.map(f); }
var t1 = Date.now();
print(t1 - t0);
})()
24
(function () {
var a = [1, 2, 3, 4, 5, 6];
var t0 = Date.now();
for (var i = 100000; --i >= 0;) { a.map(function f() {}); }
var t1 = Date.now();
print(t1 - t0);
})()
29
传递named函数比传递匿名函数要快,因为每个循环条目都会重复实例化匿名函数。