Is it bad practice to have a series of named functions in js files?
我正在编写一个js文件,它在doc-ready部分中有很多jquery命令,然后在jquery命令中引用了一大堆跟随它的函数。 这是一个简短的例子,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | //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或类似的东西表现不佳......我能找到的最接近的例子就在这里。 我想肯定地知道。
不。调用命名函数会花费变量查找(如果不是全局则便宜)和函数调用。 将命名函数传递给另一个函数只需要一个变量查找。
下面是在方形免费shell中Chrome上运行的一些微基准测试。 用一粒盐来衡量所有基准。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | (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 |
传递命名函数比传递匿名函数要快,因为每个循环条目都会重复实例化匿名函数。