调查一些.html文件我发现了有趣的JavaScript构造:
<script>
...
ga(
function(tracker) {
(
function(w, d, c) {
$.getScript(
('https:' == d.location.protocol ? 'https://' : 'http://') + "service.com/script.js?param;client_id"+c+";ref" + escape(d.referrer) + ";url" + escape(d.URL) + ";cook" + escape(d.cookie)
);
}
) (window, document, tracker.get('clientId'));
}
);
</script>
有一些函数'ga'将函数作为输入参数,将来会对它做些什么。
问题是关于该匿名函数的主体。为什么他们创建了一个更多的内部匿名函数并立即调用它而不是像这样执行相同的代码:
<script>
...
ga(
function(tracker) {
// I have changed d -> document, c -> tracker.get('clientId')
$.getScript(
('https:' == document.location.protocol ? 'https://' : 'http://') + "service.com/script.js?param;client_id"+tracker.get('clientId')+";ref" + escape(document.referrer) + ";url" + escape(document.URL) + ";cook" + escape(document.cookie)
);
}
);
</script>
答案 0 :(得分:2)
背后可能有几个原因。
一个原因是简化单个表达式的多次使用。例如,在您的代码段中,您必须多次使用document
,而原始代码要短得多,因为内部函数对变量使用1个字母的长名称。
如果您必须在代码的一小部分中多次使用更长的表达式,这将变得更加重要。
答案 1 :(得分:2)
(function called(arguments){
// statements here
})();
这样做是为了保护数据及其范围。所以你知道你的变量只能在范围内使用。
希望它有所帮助。