有人可以解释为什么代码执行,但当我检查错误持续说
"未捕获的TypeError:undefined不是函数"
当我做
(alert("hi"))();
Run Code Online (Sandbox Code Playgroud)
这个
(alert("hi"))();
Run Code Online (Sandbox Code Playgroud)
不是自我调用的函数.这将是一个自我调用的函数:
(function(){alert("hi");})();
Run Code Online (Sandbox Code Playgroud)
请注意它是如何的function.
第一种情况,你试图调用返回的内容alert.不幸的是,警报返回undefined,所以你实际做的是:
alert("hi");
undefined();
Run Code Online (Sandbox Code Playgroud)
正如错误所说, undefined is not a function
后者几乎(但不完全)等同于做这样的事情:
function foo() {
alert("hi");
}
foo();
Run Code Online (Sandbox Code Playgroud)
但是允许您立即调用匿名函数而不必为其命名.
注意:如果alert您没有调用返回函数的函数,那么您的原始语法将完全有效(如果有点难以阅读).例如,您可以这样做:
function myalert(str) {
return function() { alert(str); }
};
(myalert("hi"))();
Run Code Online (Sandbox Code Playgroud)
但是你的额外括号是完全没必要的,因为你可以很容易地做到:
myalert("hi")();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |