在某些情况下,在单个 JavaScript 文件中有多个自调用函数会引发错误。让第二个函数返回一个值可以避免错误。
我有一个准系统 HTML 文件...
<script src="two.js"></script>
<script src="one.js"></script>
...使用这些脚本:
// two.js
(function () {
console.log('1/2')
})()
(function () {
console.log('2/2')
})()
// one.js
(function () {
console.log('1/1')
})()
当我在 Chrome 中打开文件时,我得到以下输出:
1/2 two.js:2
Uncaught TypeError: undefined is not a function two.js:6
1/1
其他浏览器以自己的方式抱怨。换句话说,在同一个脚本中有两个自调用函数会导致问题。每个脚本都有一个自调用函数可以正常工作。如果我把第二个函数脚本two.js注释掉,就没有问题了。
但是,如果我让第二个函数返回一个值,那么也没有问题。如果我将 two.js 更改为此,一切正常:
(function () {
console.log('1/2')
})()
foo = (function () {
console.log('2/2')
return 'bar'
})()
为什么第一个版本失败,第二个版本成功?