不完整的可执行自加载闭包
Incomplete executable self-loading closures
浏览器/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只会将其报告为错误而不运行。
- 在npm中加载一个包的多个版本
- 你能加载一个带有JS超时的PHP包吗
- 将 package.json 用于客户端包,可以在浏览器中动态加载
- 需要.js填充程序,用于加载 JQuery UI 和其他 JQuery 包
- 来自 react-redux-universal-hot-hot 示例初学者工具包中的第三方 API 的初始数据加载
- 只能在闭包中加载jQuery
- 如何使用 ClosureCompiler.js 加载 npm 包
- 添加了 BigCommerce 模板 JS 包加载延迟
- Webpack 无法从node_modules加载包
- 在 JavaScript 闭包中加载一次 XML 文件
- 在多个Browserify或Webpack捆绑包中共享通过NPM加载的模块的简单解决方案
- React原生android无法加载js捆绑包:index.android.js中的更改可以'在apk中看不到
- 从以zip下载的捆绑包中加载UIWebview中的.js文件
- RethinkDB:在r.js方法中加载一个NodeJS包
- 闭包:在加载base.js之前更改ENABLE_DEBUG_LOADER
- 动态加载Dojo包
- 如何在加载后将媒体变量添加到数组时不改变它们.闭包
- 我如何检查/使用jQuery在闭包之前加载jQuery
- 我怎样才能使google的闭包库加载得更快?
- 不完整的可执行自加载闭包