为什么Javascript bookmarklet包含在闭包中?
我不认为有人会毫无理由地将无名的功能放在那里。
我已经阅读了很多关于闭包的解释,但我仍然不觉得我已经掌握了整个概念。
谢谢你们!
答案 0 :(得分:2)
通过在创建后执行函数来不污染全局范围。
(function(){var x=10; })()
alert(window.x) // undefined
答案 1 :(得分:1)
这可以防止书签中的变量泄漏到页面中。
答案 2 :(得分:0)
因为制作它们的人是网络的好公民:)并且不想意外地跳过实际页面的JavaScript。
答案 3 :(得分:0)
范围冲突和退货政策的混合。
该主题中的zzzzBov's answer简洁地涵盖了主要问题。
答案 4 :(得分:0)
通常是为了避免污染全局命名空间,它也被称为Ben Cherry所描述的模块模式:http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
答案 5 :(得分:0)
有两个原因:
第一个是防止书签所需的任何变量的全局污染。使用闭包意味着var a
不会将window.a
添加到全局上下文中。此外,使用命名函数会将其添加到全局命名空间。 function a() {...}
会添加window.a
。
第二个是避免通过返回字符串意外重新创建DOM。返回字符串的任何javascript:
url将使用字符串的内容作为源创建一个全新的DOM。