Javascript自执行功能"不是一个功能"

Phi*_*enn 21 javascript iife

我有:

var Init = (function() {
   my js goes here
})();
Run Code Online (Sandbox Code Playgroud)

并且在加载页面时我的js正确执行.我也有:

$('form :checkbox').change(function() {
   Init();
});
Run Code Online (Sandbox Code Playgroud)

但是萤火虫说Init不是一个功能.

小智 54

它不是一个功能.

(function() {
   ...
})()
Run Code Online (Sandbox Code Playgroud)

然后评估匿名函数.和评估的结果显然不返回函数对象在这种情况下:-)

考虑:

f = (function() {
   return "not a function :("
})()
alert(f())
Run Code Online (Sandbox Code Playgroud)

f = (function() {
   return function () { return "Yay!" }
})()
alert(f())
Run Code Online (Sandbox Code Playgroud)

快乐编码:)


这是一个"执行一次"然后"返回稍后要执行的东西"的函数.(参见"你可以[分配]一个功能或者调用它;你不能同时做两个......"来自Slaks的答案.)但是,我不会这样做.

Init = (function () {
  function Init () {
    alert("whee!")
  }
  Init()
  return Init
})()
Init()
Run Code Online (Sandbox Code Playgroud)

这是CD Sanchez的另一个解决方案(更短/更清晰)(见注释),它利用了赋值评估指定值的事实:

var Init; (Init = function Init () {
  alert ("wee");
})()
Run Code Online (Sandbox Code Playgroud)

  • 最后两个片段可以简化为:`var Init; (Init = function(){alert("wee");})()` (7认同)
  • 为什么不写`function Init(){} Init();`?它使意图更清晰. (5认同)