浏览器/ 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..?
答案 0 :(得分:1)
为什么不运行一些简单的测试?
使用这样的文件:
<script>
(function a () {
alert('a');
</script>
<script>
$(function() { alert('b'); a(); });
</script>
这将告诉您以下情况:
提醒('a'),提醒('b'),提醒('a')==&gt; (不太可能):浏览器完成了函数定义并写了关闭执行parens
提醒('b'),提醒('a')==&gt;浏览器完成的功能定义和调用按预期进行
警告('b'),对未定义的a()==&gt;抛出错误浏览器忽略了不完整的功能定义
什么都不做==&gt;浏览器在找不到右括号后退出解析
我认为浏览器不太可能在闭包的执行部分中添加,但不会在可能的情况下添加到缺失的结尾}。虽然这绝对不是你想要依赖的行为,但应该总是很好地形成你的脚本文件。
答案 1 :(得分:1)
有可能吗?是的。或者。取决于您准备接受的假设。
是否会在当前浏览器中发生?我不知道,虽然我从未尝试过。
这是一个好主意吗?不。至少,不是我认为的。我想不出我想要这个的原因。你能进一步解释为什么你会吗?
以你发布的例子为例:
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行之间,因为这样{ {1}}声明不会与var a
定义冲突。你想让浏览器想出那种东西吗?
浏览器是否应该以“贪婪”为基础并尽可能多地包含在外部功能中?尽可能少?因为你可以打赌IE会变得“贪婪”,FF会变得很小,Chrome会做一个网页搜索,在另一个页面上找到一个类似但完整的脚本而不是使用完整的脚本,Opera会把它报告为错误,不要运行它。