javascript - 带有两个连续的自执行匿名函数的 TypeError

标签 javascript

这个问题的灵感来自the accepted answer here .为什么下面的一段代码会先提示“first”,然后提示“second”,然后出现 TypeError 错误?

(function() {
    alert('first');
}())


(function() {
    alert('second');
}())

给出的解释是第一个函数的返回值正在尝试被调用。但为什么会这样? 【还有,为什么第一次自执行后分号插入没有加分号?】

最佳答案

如果没有分号,它将评估为:

(function() {
    alert('first');
}())(function() {
    alert('second');
}())

第一个函数被执行,因为它没有返回任何东西,它进一步计算为:

undefined(function() {
    alert('second');
}())

然后执行第二个函数,再次返回undefined,所以:

undefined(undefined)

这当然不起作用(TypeError 因为 undefined 不是函数)。单独的函数调用应该用分号分隔,实际上每个语句都应该是这样。

关于javascript - 带有两个连续的自执行匿名函数的 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8625220/

相关文章:

javascript - 查找所有外部 css/js 文件和文件引用

javascript - 检查数组是否包含具有特定属性值的对象

javascript - MVC asp.net 中 Google Map Api 上的多个标记

php - 使用 Javascript/PHP/mySQL 的日历

javascript - 渲染为 DOM 状态的函数

javascript - 带有位置服务的angularjs注入(inject)器

javascript - 在 JavaScript 中将 float 转换为 32 位十六进制字符串

javascript - 使用钩子(Hook)响应更改 bool 值并获取回调

javascript - 如果动态表没有行,则启用/禁用提交按钮

javascript - AngularJS - ui-grid - 列移动 - 获取新的列顺序