javascript – 使用命名的即时调用函数表达式(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();

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

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

解决方法

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.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...