使用命名的立即调用函数表达式(IIFE)而不是注释

时间:2013-03-20 17:17:34

标签: javascript comments maintainability iife

在JS代码中使用命名IIFE来描述和分组相关代码有哪些优缺点?

我一直在使用这个“模式”来为我的更多程序代码提供结构,这些代码只能在一个地方执行。


实施例

(function hideStuffOnInstantiaton(){
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
}());

我觉得这比两者都好:

// hide Stuff on Instantiaton
$('oneThing').hide().removeClass();
$('#somethign_else').slideUp();
$('.foo').fadeOut();

因为随着时间的推移,评论可能会与代码分开,并且不会立即明白评论适用于哪些行

和:

function hideStuffOnInstantiaton(){
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
};

hideStuffOnInstantiaton();

因为如果它只在一个地方执行,为什么将函数及其执行分开?


使用此模式时是否存在任何性能,可维护性,可测试性或跨浏览器注意事项?我不相信我见过很多人在野外使用 ,但我觉得可以非常有用

2 个答案:

答案 0 :(得分:8)

我一直认为标签很酷:

hideStuffOnInstantiaton: {
  $('oneThing').hide().removeClass();
  $('#somethign_else').slideUp();
  $('.foo').fadeOut();
}

实际上,这样做通常很愚蠢。相反,分组功能通常属于它自己的功能。

答案 1 :(得分:6)

  

为什么将函数及其执行分开,如果它只在一个地方执行?

在这种情况下,根本没有理由使用函数(带有开销) - 只需内联代码即可。并且不要在函数名称中隐藏注释,我称之为不好的做法。如果有人将评论从代码中分离出来,那不是你的错 - 实际上他也可以在你的IENFE中包装完全不相关的内容。

虽然如果你重复使用函数(递归)或者需要它来构建一个闭包的东西,并且命名函数使堆栈跟踪更容易调试,这个模式可能是有用的,有various bugs in IE。如果你真的不需要它,那就避免它 - 你不这样做。

如果您想表达您的评论适用于一段代码,您可以明确地使用语句并将您的评论放在首位:

{ // hide Stuff on Instantiaton
    $('oneThing').hide().removeClass();
    $('#somethign_else').slideUp();
    $('.foo').fadeOut();
}

......虽然这可能会让你的读者和多余的IEFE一样迷惑。