Javascript 不完整的可执行自加载闭包
浏览器/ajax/javascript是否可以自动完成,并在保持打开状态时关闭自加载闭包?Javascript 不完整的可执行自加载闭包,javascript,closures,dynamic-script-loading,Javascript,Closures,Dynamic Script Loading,浏览器/ajax/javascript是否可以自动完成,并在保持打开状态时关闭自加载闭包? 1 (function() 2 { 3 function a(n){this.name=n;} 4 var a=this; 5 //more code in here 6 alert(a); 7 //})(); - The terminating brace and parens were not present in the script i saw - Is it possible that it
1 (function()
2 {
3 function a(n){this.name=n;}
4 var a=this;
5 //more code in here
6 alert(a);
7 //})();
- The terminating brace and parens were not present in the script i saw
- Is it possible that it must be generated dynamically, so that the .js file
- does not contain it but the script/ajax later appends it ..?
- Can the browser complete it..?
为什么不运行一些简单的测试呢 使用以下文件:
<script>
(function a () {
alert('a');
</script>
<script>
$(function() { alert('b'); a(); });
</script>
(职能a){
警报(“a”);
$(函数(){alert('b');a();});
这将告诉您以下场景:
我认为浏览器不太可能添加闭包的执行部分,但添加缺少的结尾}。虽然这绝对不是您想要依赖的行为,并且应该始终很好地形成脚本文件。可能吗?是。或否。这取决于您准备接受的假设 在当前浏览器中是否会发生这种情况?据我所知不是这样,尽管我从未尝试过 这是个好主意吗?不。至少,在我看来不是。我想不出我想要这个的原因。你能进一步解释一下你为什么想要这个吗 以您发布的示例为例:
1 (function()
2 {
3 function a(n){this.name=n;}
4 var a=this;
5 //more code in here
6 alert(a);
7 //})();
因此,浏览器看到有一个函数表达式没有结束符}
,因为这样的函数表达式实际上对()没有任何作用代码>最后一位浏览器应该假设这是预期的,并且也这样做吗?好的,现在,它应该在哪一行添加它?如果在第2行、第3行、第4行、第5行或第6行之后添加,则它将是有效的可执行代码。在我看来,在第3行和第4行之间添加缺少的结束括号是最合理的,因为这样var a
声明就不会与函数a
定义冲突。你想让浏览器知道这类事情吗
浏览器是否应该在“贪婪”的基础上工作,并在外部功能中包含尽可能多的内容?尽可能少?因为你可以打赌IE会变得“贪婪”,FF会变得最小,Chrome会在另一个页面上搜索类似但完整的脚本,然后使用完整的脚本,Opera只会将其报告为错误,而不会运行它