为什么twitter的嵌入方法确实使用了闭包?

时间:2014-04-11 10:18:46

标签: javascript twitter closures

https://dev.twitter.com/docs/embedded-timelines中,Twitter解释说要嵌入时间轴,你必须将这两行添加到你的html:

<a class="twitter-timeline" href="https://twitter.com/twitterapi" data-widget-id="YOUR-WIDGET-ID-HERE">Tweets by @twitterapi</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>

为什么脚本使用闭包而不是仅仅采用更简单的方式?

<script>var d=document,s="script",id="twitter-wjs";var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);};</script>

1 个答案:

答案 0 :(得分:1)

函数范围为您提​​供局部变量。

如果没有该功能,父页面范围将会混杂使用dsidjsfjs等符号。

也许其他人正在使用那些。

实际上,这不是一个闭包,恰恰相反:闭包是一个捕获其父作用域部分的函数。他们似乎特别注意而不是来做这件事,只是引用函数参数,甚至不是来自父作用域的document