在JS代码中使用命名IIFE来描述和分组相关代码的利弊是什么?
我一直在使用这个"模式"来为我的更多程序代码提供结构,这些代码只能在一个地方执行.
(function hideStuffOnInstantiaton(){
$('oneThing').hide().removeClass();
$('#somethign_else').slideUp();
$('.foo').fadeOut();
}());
Run Code Online (Sandbox Code Playgroud)
我觉得这比两者都好:
// hide Stuff on Instantiaton
$('oneThing').hide().removeClass();
$('#somethign_else').slideUp();
$('.foo').fadeOut();
Run Code Online (Sandbox Code Playgroud)
因为随着时间的推移,评论可能会与代码分开,而且评论所适用的行不是很明显
并:
function hideStuffOnInstantiaton(){
$('oneThing').hide().removeClass();
$('#somethign_else').slideUp();
$('.foo').fadeOut();
};
hideStuffOnInstantiaton();
Run Code Online (Sandbox Code Playgroud)
因为如果它只在一个地方执行,为什么要分开函数及其执行?
使用此模式时是否存在任何性能,可维护性,可测试性或跨浏览器注意事项?我不相信我已经看到很多人在野外使用它但我觉得它可能非常有用
我正在分析来自John Resig网站的以下两个网址,但我不明白为匿名功能命名是如何产生影响的.
我的理解是,匿名函数的名称只能在函数定义中使用,并且不在其中,但在以下链接中它会产生巨大的差异
任何解释或参考都将是一个很大的帮助.
我仍然对#14中的以下几行感到困惑
var samurai = { yell: ninja.yell };
var ninja = {};
assert( samurai.yell(4) == "hiyaaaa", "The method correctly calls itself." );
Run Code Online (Sandbox Code Playgroud)
当忍者现在指向一个空白对象时,Samurai.yell方法如何能够指向ninja.yell.
只有#13和#14之间的区别是为#14中的函数表达式提供名称.
是ninja.yell COPIED大喊并没有引用或这些NAMED函数表达式在某些情况下具有全局范围?
同样的事情发生在#13和#14中,唯一的区别是函数在#14中命名,#13中的未命名加上#14中的ninja = {}和#13中的ninja = null.有没有关于NAMED FUNCTION EXPRESSIONS的隐藏概念,我错过了#14使得#14可行,#13不可行.
我熟悉IIFE执行函数的方法:
(function(){
//stuff
}());
//immediately invoked, parsed as an expression
Run Code Online (Sandbox Code Playgroud)
这种方式我只需通过声明它就像任何其他对象一样为函数赋值:
var theFunction = function(){
//stuff
}
//can be executed with theFunction();
Run Code Online (Sandbox Code Playgroud)
但今天我看到这两个组合如下:
var theFunction = (function(){
//stuff
}());
Run Code Online (Sandbox Code Playgroud)
这是做什么的,或者它可以提供什么样的优势?