浏览器/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 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>
这将告诉您以下场景:
alerts('a'(,alerts('b'(,alerts('a''(===>(不太可能(:浏览器完成了功能定义并编写了执行parens 的闭包
警报('b'(,警报('a'(===>浏览器完成了功能定义,调用按预期进行
alerts('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
声明就不会与function a
定义冲突。你想让浏览器解决这类问题吗?
浏览器是否应该在"贪婪"的基础上工作,并在外部功能中尽可能多地包含?尽可能少?因为你可以打赌IE会变得"贪婪",FF会变得最小,Chrome会在另一个页面上搜索一个类似但完整的脚本,并使用完整的脚本代替,Opera只会将其报告为错误而不运行。