Javascript中的自调用函数

时间:2014-07-02 19:07:52

标签: javascript

有人可以解释为什么代码会执行,但是当我检查错误时仍然会说

  

“未捕获的TypeError:undefined不是函数”

当我做的时候

(alert("hi"))();

3 个答案:

答案 0 :(得分:5)

这个

(alert("hi"))();

不是自我调用的函数。这将是一个自我调用的函数:

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

请注意它是function

第一种情况,您尝试调用alert返回的内容。不幸的是,警报返回undefined,所以你实际做的是:

alert("hi");
undefined();

正如错误所说,undefined is not a function

后者几乎(但不完全)等同于做这样的事情:

function foo() {
   alert("hi");
}
foo();

但是允许您立即调用匿名函数而不必为其命名。

注意:如果您调用了一个返回函数的函数而不是alert,那么您的原始语法将完全有效(如果有点难以阅读)。例如,您可以这样做:

function myalert(str) { 
    return function() { alert(str); }
};

(myalert("hi"))();

但你的额外括号是完全没必要的,因为你可以轻松地做到:

myalert("hi")(); 

答案 1 :(得分:1)

alert("hi")返回您正在调用的undefined,从而导致出现错误消息。

答案 2 :(得分:0)

您没有正确使用提醒功能:

alert("I am an alert box!");

根本不是自我调用的功能。阅读有关提醒功能here

的信息