有人可以解释为什么代码会执行,但是当我检查错误时仍然会说
“未捕获的TypeError:undefined不是函数”
当我做的时候
(alert("hi"))();
答案 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)