Javascript自调用函数vs <script>直接放置在HTML元素后面的标签
Javascript self calling function vs <script> tag placed directly after the HTML element
使用script标签:
<div id="first">
me is first
</div>
<script type="text/javascript">
var first = document.getElementById("first");
console.log(first);
</script>
Self-invoking功能:
<div id="second">
me is second
</div>
<script type="text/javascript">
(function(){
var second = document.getElementById("second");
console.log(second);
})();
</script>
自调用函数和放置在html元素后的<script>
标签在用法上有什么区别?我一直在调试以寻找差异。但他们似乎表现得一样。或者仅仅是关于好习惯/坏习惯?
自执行函数创建一个包含second
变量的新内部作用域,并防止它泄漏到全局命名空间中。然而,普通<script>
块的first
变量将被添加到全局作用域中。
请记住,单个script
块没有自己的作用域,它们都在相同的全局作用域内操作,这对于脚本的互操作是必要的。
你发布的两个例子之间的区别本质上是一个是存储变量(var秒)在一个函数和一个不是(var第一)。
在第二个示例中,您将元素对象赋值给中的变量,这是一个匿名的,自调用的函数(没有名称归属于它,因此它的值永远不会存储,下面的括号附加在末尾调用该函数)。
一个命名变量的例子是…
function yourFunctionName () {
console.log("I'm a function with a name");
}
一个匿名函数是一个没有名字的函数,即使它被分配给变量anon_function
,它仍然是匿名的…
var anon_function = function(){
console.log("I'm anonymous");
}
上述函数的返回值存储在anon_function
变量中。
后面的括号告诉函数立即执行,就像调用一个命名函数一样。
function(){
console.log("I'm anonymous and self-invoking");
}()
一旦函数运行并终止,在函数内部创建的变量将被丢弃,全局对象保持原样。
将整个函数括起来的圆括号是"推荐的",以帮助程序员将其与普通函数区分开来:
(function(){
console.log("I'm anonymous, self-invoking and wrapped in parenthesis just for clarity");
})()
这里有一篇关于自调用函数的简短pdf文章和一篇关于匿名函数的好文章
在第一个示例中,您可以在JavaScript控制台中操作变量first
。
在自调用函数中,var second
受到函数"wrapper"的保护,不能被外部JavaScript控制台修改。这种函数被称为匿名函数,因为它没有名称(不像function doStuff()
)。
一般来说,最好使用自调用函数编写代码,因为匿名函数中的变量将留在该作用域中,而不会向上传播到全局作用域中。
- 如何在tinymce编辑器中将点击事件绑定到html标签
- 如何将具有相同功能的两个select html标签的两个JS组合在一起
- 带有html标签的Summernote内容
- 为什么我的HTML标签消失了
- 如何忽略单词like“”中的未使用空格;测试-文本”;同时构建html标签
- 在AngularJS中过滤-html标签中的文本
- 如何在另一个 html 标签内选择 web 元素硒 Web 驱动程序与 html 源
- 我怎么能"合并”;两个HTML标签
- JavaScript if else 语句来显示 html 标签
- 在 JavaScript 中实现 HTML 标签
- 如何用jQuery替换HTML标签的一部分
- 在javascript文件中编写html标签而不是“text”
- 窗口确认在 AJAX 帖子中打印 HTML 标签
- 如何在javascript函数中弹出php(与html标签混合)文件
- HTML标签的问题与Javascript一致
- 使用Javascript获取所有html标签
- 如何从JavaScript外包HTML标签
- Ckeditor:如何在mysql中避免使用Ckeditor中的html标签来节省时间
- 如何在 jquery 和 javascript 中检索 html 标签属性
- 如何获取html标签的字体大小