我有一个应用程序,在调试模式下写入许多单独的JavaScript文件,但作为页面的head块的一部分同步加载.在发布中,我将所有这些文件合并在一起并将它们缩小.今天我一直在缩小版本中发现错误,所以我加载了一个合并文件来调试问题,发现一个库是自动执行一个函数,它导致其他函数window被执行.
我已经使用通用对象回复了这里的行为,无论窗口与否都无关紧要:
<head>
<script>
var a = {}
a.X = function x(){
console.log("shouldn't be executed");
}
(function(a){
console.log("self execution");
}(a));
</script>
</head>
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我得到了输出
self execution
shouldn't be executed
Run Code Online (Sandbox Code Playgroud)
如果我将呼叫改为
<head>
<script>
var a = {}
function x(){
console.log("shouldn't be executed");
}
a.X = x;
(function(a){
console.log("self execution");
}(a));
</script>
</head>
Run Code Online (Sandbox Code Playgroud)
然后我就明白了
self execution
Run Code Online (Sandbox Code Playgroud)
这是我的预期.在第一个例子中,为什么X在a传递给自执行函数时被调用?
Que*_*tin 22
;分配函数后,您将丢失a.X.
不会触发分号插入.
在(和)周围的匿名函数来调用以前的功能,其返回值被分配到X.
即你所拥有的相当于:
var a = {};
a.X = (function x(){
console.log("shouldn't be executed");
}(
(function(a){
console.log("self execution");
}(a))
));
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个问题对JS Lint来说是一个很好的广告,它本来可以把它拿起来.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |