在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();
因为如果它只在一个地方执行,为什么将函数及其执行分开?
使用此模式时是否存在任何性能,可维护性,可测试性或跨浏览器注意事项?我不相信我见过很多人在野外使用 ,但我觉得可以非常有用
答案 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一样迷惑。