我有一个应用程序,在调试模式下,它由许多单独的JavaScript文件编写,但作为页面头部的一部分同步加载。在发布时,我将所有这些文件合并并进行缩小处理。今天我发现缩小版本中出现了一个错误,因此我加载了一个单个合并的文件来调试问题,并发现一个库正在自我执行函数,这导致其他在
我已经使用通用对象重现了此行为,无论是window还是其他对象都没有关系:
在这个例子中,我获取了输出。
window
上定义的函数被执行。我已经使用通用对象重现了此行为,无论是window还是其他对象都没有关系:
<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
这正是我预料中的。在第一个例子中,当a
被传递给自执行函数时,为什么会调用X
?
for
循环中设置事件处理程序无关。 - Pointy