jQuery中$(function() {})与不写的区别及立即执行函数解析

作者:闭包旅人时间:2026-10-29 13:27:29浏览:354

本文解析jQuery中$(function() {})的等效写法$(document).ready(),说明其确保DOM加载完成后执行代码的安全性。通过对比直接编写脚本与将脚本置于页面底部的效果,阐述DOM未就绪时的报错原因。同时简要介绍立即执行匿名函数((function(){})())在创建闭包和避免变量冲突中的作用。

jQuery中$(function() {})的等效写法与DOM加载机制

在JavaScript开发中,$(function() {....})是jQuery库的经典写法,它完全等同于$(document).ready(function() {....})。该语法的核心作用是等待页面结构加载完毕后再执行内部函数。由于操作DOM元素必须在文档对象模型构建完成后进行,这种延迟执行的机制能显著降低出错概率,因此在使用jQuery时极为常见。

$(document).ready()确保代码仅在页面所有内容加载完成后运行。若将代码直接嵌入script标签,浏览器解析到该标签时便会立即执行其中代码。此时若代码试图访问尚未加载的DOM节点或资源,程序将抛出错误。解决此问题的方法之一是将script标签移至页面底部,此时执行时机与ready()一致,可避免此类错误。

为了简化代码,$(document).ready(function(){})可以简写为$(function(){});,两者功能完全相同。

直接编写脚本与页面底部放置脚本的效果对比

以下示例演示点击段落后隐藏该段落的功能:


<html>
<head>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
 $("p").click(function(){
 $(this).hide();
 });
});
</script>
</head>
<body>
 <p>If you click on me, I will disappear.</p>
</body>
</html> 

若移除$(document).ready(function() {});包装,直接编写点击事件,则无法实现段落隐藏效果,因为脚本执行时DOM可能尚未就绪。


<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
 $("p").click(function(){
 $(this).hide();
 });
</script>
</head>
<body>
 <p>If you click on me, I will disappear.</p>
</body>
</html> 

然而,若将script标签放置在页面HTML结构的最后,即使不使用ready()包装,也能正常恢复并执行隐藏效果,因为此时DOM已加载完毕。


<html>
<head>
</head>
<body>
 <p>If you click on me, I will disappear.</p>
</body>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
 $("p").click(function(){
  $(this).hide();
 });
</script>
</html> 

立即执行匿名函数的作用与闭包应用

此外,JavaScript中(function(){})()这种写法的作用和用法也值得了解。

这与对象定义无关,(function(){})()表示立即执行一个匿名函数。其主要用途是创建一个类似闭包的作用域环境,将内部变量与外部隔绝,从而有效避免全局变量冲突。


(function(){
 var a;
..........
})()

本文主要探讨了JavaScript中$(function() {});写法与不写的具体区别,并对相关技术细节进行了说明,希望能为读者提供实际帮助。

作者最新文章