为什么Javascript bookmarklet包含在闭包中?

时间:2012-01-16 03:08:09

标签: javascript function closures bookmarklet

为什么Javascript bookmarklet包含在闭包中?
我不认为有人会毫无理由地将无名的功能放在那里。

我已经阅读了很多关于闭包的解释,但我仍然不觉得我已经掌握了整个概念。

谢谢你们!

6 个答案:

答案 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娱乐

第二个是避免通过返回字符串意外重新创建DOM。返回字符串的任何javascript: url将使用字符串的内容作为源创建一个全新的DOM。