在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();
因为为什么分离函数及其执行,如果它只在一个地方执行?
使用此模式时是否有任何性能,可维护性,可测试性或跨浏览器注意事项?我不相信我已经看到很多人在野外使用这个,但我觉得它可能非常有用
解决方法
why separate the function and its execution if its only executed in one place?
在这种情况下,没有任何理由使用函数(具有开销) – 只是内联代码.并且不要在函数名中隐藏注释,我称之为坏习惯.如果有人将注释与代码分开,那么他的错误不是你的 – 实际上他也可以在您的IENFE中完全不相关的内容.
虽然这种模式可能会有用,如果您重用该函数(递归)或需要它来构建一个关闭的东西,而命名的函数使堆栈跟踪更容易调试,那么有various bugs in IE.所以如果你不需要它 – 而不是你.
如果你想表达你的评论适用于一个代码块,你可以明确地使用一个block语句,并把你的评论放在头上:
{ // hide Stuff on Instantiaton $('oneThing').hide().removeClass(); $('#somethign_else').slideUp(); $('.foo').fadeOut(); }
…虽然这可能会混淆你的读者和多余的IEFE.