当我有一些代码时,我需要执行不止一次,我将其包装在一个函数中,所以我不必重复.有时,另外还需要在页面加载时最初执行此代码.现在我这样做:
function foo() { alert('hello'); } foo();
我宁愿这样做:
(function foo() { alert('hello'); })();
解决方法
如果您的函数不依赖于返回值,则可以执行此操作
var foo = (function bar() { alert('hello'); return bar; })(); // hello foo(); // hello
这将使用命名函数表达式中的本地引用栏将函数返回到外部foo变量.
或者即使如此,您可以使返回值有条件…
var foo = (function bar() { alert('hello'); return foo ? "some other value" : bar; })(); // hello alert( foo() ); // hello --- some other value
或者只是手动分配给变量而不是返回…
var foo; (function bar() { alert('hello'); foo = bar; })(); // hello foo(); // hello
如@RobG所述,IE的某些版本会将标识符泄漏到封闭的变量范围内.该标识符将引用您创建的功能的副本.为了使您的NFE IE-safe(r),您可以取消该引用.
bar = null;
请注意,标识符仍然会在范围链上以相同的名称遮蔽标识符. Nullifying不会帮助,局部变量不能被删除,所以明智地选择NFE名称.