我有一个应用程序在调试模式下编写在许多单独的 javascript 文件中,但作为页面头块的一部分同步加载。在发布时,我将所有这些文件合并在一起并缩小它们。今天我一直在缩小版本中发现一个错误,所以我加载了一个合并文件来调试问题,发现一个库正在自我执行一个函数,它导致其他定义的函数window
被执行。
我已经用一个通用对象在这里 repo 了这个行为,不管它的窗口与否:
<head>
<script>
var a = {}
a.X = function x(){
console.log("shouldn't be executed");
}
(function(a){
console.log("self execution");
}(a));
</script>
</head>
在这个例子中,我得到的输出
self execution
shouldn't be executed
如果我将呼叫更改为
<head>
<script>
var a = {}
function x(){
console.log("shouldn't be executed");
}
a.X = x;
(function(a){
console.log("self execution");
}(a));
</script>
</head>
然后我得到
self execution
这是我所期望的。在第一个示例中,为什么在传递给自执行函数X
时被调用?a