自执行函数 JavaScript

4

我在火狐和谷歌浏览器中编写了一个自调用函数,但它没有被调用。

我大致写了这样的内容:

(function () { alert("THE"); })();

自执行函数在当前浏览器中无法工作吗?

我已经包含了所有必要的标记,页面上的所有其他代码都可以正常工作。


1
"self invoking"? 你是什么意思?顺便说一句,它在Chrome上可以工作。 - DanC
1
你有页面链接吗?那段代码是有效的。如果你把它替换成 alert("THE"); 而不使用函数,那么弹出框会执行吗?我认为不会。 - Paul
1
这段代码运行得非常完美。请展示周围的代码。确保没有其他产生错误的JavaScript代码(您可以检查Firebug或Chrome的控制台)。 - Maxim Krizhanovsky
7个回答

11
“自执行函数”并不是 JavaScript 的一部分,它只是人们给特定代码模式(如 AJAX 等)起的一个名称。这些模式应该可以在任何支持 JavaScript 的地方使用。
你所谓的“自执行函数”其实就是创建一个匿名函数然后立即调用它(与将其存储在变量、作为对象值、函数参数等中不同)。
也就是说,以下代码基本上是相同的:
var f = function(){...}; f()

( function(){...} )()

因为你的“自执行函数”是JavaScript的基本部分,所以除非内部不工作或者环境出了问题,否则它不可能无法正常工作。如果你将代码复制粘贴到一个新的空白页面上,它会正常工作。肯定还有其他问题:

检查开发控制台中的错误。具体来说,请确保没有语法错误或者测试网页存在奇怪的问题(例如如果你以某种方式重新定义了alert...)。


2
你是对的,问题在于我有一个语法错误,在它之前的语句有一个隐式分号,这应该是显式的。它导致了解析错误。 - rubixibuc

4

我曾遇到一个自执行函数的问题,会导致出现以下错误...

Uncaught TypeError: object is not a function

问题是由于在开括号之前的行没有分号造成的。

是的,我也遇到了同样的错误,加上分号就好了。 - Anthony

3
<script type="text/javascript">
  (function() {
     alert('Hello World!');
  })();
</script>

这在我安装的每个浏览器上都可以工作。


2

那个函数是有效的。Javascript支持函数式编程,因此即使是非常老的浏览器,也不应该无法运行该代码。你确定该语句被执行了吗?尝试调试在该语句之前发生的javascript。


0

这个带有返回值的自执行函数在所有现代浏览器(Safari、Chrome和Firefox)中都可以正常工作。该函数会立即、自动地匿名执行。

<script type="text/javascript">
    alert((function(){
        return("Hello World");
    })());
</script>

0

这个函数肯定能够正常工作。我建议你检查一下你的浏览器控制台,看看页面中是否存在 JavaScript 错误。也许你可以尝试在脚本开头添加一个简单的 console.log 函数来查看是否首先调用了任何 JavaScript 代码。


-1

我遇到了类似的问题,我在下面提到。

我无法在任何浏览器上运行这个自调用函数。

(function myfunc() {
    var x = 34;
    console.log(x);
})();

但是每当我像下面这样添加window.onload时,它就可以正常工作:
window.onload = (function myfunc() {
    var x = 34;
    console.log(x);
})();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接