关于javascript:在js文件中有一系列命名函数是不好的做法吗?

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

传递命名函数比传递匿名函数要快,因为每个循环条目都会重复实例化匿名函数。