为什么 Javascript 小书签要用闭包包裹?

发布于 2024-12-27 15:58:37 字数 120 浏览 1 评论 0 原文

为什么 Javascript 小书签包含在闭包中?
我不认为有人会无缘无故地把一个未命名的函数放在那里。

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

谢谢你们!

Why are Javascript bookmarklets wrapped in closures?
I wouldn't think someone would put an unnamed function in there for no reason.

I have read quite a few explanations on closures, but I still don't feel that i've grasped the whole concept.

Thanks guys!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

独守阴晴ぅ圆缺 2025-01-03 15:58:38

创建后执行函数不会污染全局范围。

(function(){var x=10; })()
alert(window.x) // undefined

To not contaminate the global scope by executing a function after creation.

(function(){var x=10; })()
alert(window.x) // undefined
萤火眠眠 2025-01-03 15:58:38

这可以防止小书签中的变量泄漏到页面中。

This prevents variables in the bookmarklet from leaking into the page.

皓月长歌 2025-01-03 15:58:38

两个原因:

污染

第一个原因是为了防止小书签所需的任何变量的全局污染。使用闭包意味着 var a 不会将 window.a 添加到全局上下文。此外,使用命名函数会将其添加到全局命名空间中。 function a() {...} 将添加 window.a

意外的 DOM 重建

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

Two reasons:

contamination

The first is for preventing global contamination for any of the variables needed for the bookmarklet. Using a closure means that var a wont add window.a to the global context. Additionally, using a named function would add it to the global namespace. function a() {...} would add window.a.

accidental DOM recreation

The second is to avoid accidentally recreating the DOM by returning a string. Any javascript: url where a string is returned will create a brand new DOM using the contents of the string as the source.

多像笑话 2025-01-03 15:58:38

因为制作它们的人是网络的好公民 :) 并且不想意外地跳过实际页面的 JavaScript。

Because the folks who are making them are good citizens of the web :) and don't want to step over the actual page's JavaScript accidentally.

友欢 2025-01-03 15:58:38

范围冲突和退货政策的混合体。

zzzzBov 在该帖子中的回答简洁地涵盖了主要问题。

A mixture of scope conflicts and return policy.

zzzzBov's answer in this thread covers the main issues succinctly.

审判长 2025-01-03 15:58:38

它通常是为了避免污染全局命名空间,也称为模块模式,如 Ben Cherry 所描述的: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

It's generally to avoid polluting the global namespace, it's also known as the Module Pattern as described by Ben Cherry: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文