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

浏览器/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>

(职能a){
警报(“a”);
$(函数(){alert('b');a();});
这将告诉您以下场景:

  • 警报('a')、警报('b')、警报('a')==>(不太可能):浏览器完成了函数定义并编写了执行参数的闭包

  • 警报('b')、警报('a')=>浏览器已完成函数定义,调用按预期进行

  • 警报('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只会将其报告为错误,而不会运行它