Jquery—Jquery中的(function($){...})(jQuery)
当你第一眼看到“(function($){...})(jQuery)”的时候。你有什么感觉?呵呵呵,我当时还是止不住的从心底里骂了一句——操,这他妈什么劳什子。时过境迁,对于如今无比倚重Jquery的我,自感当时的自己是那么的无知,今天忙里偷闲。解释一下到底“(function($){...})(jQuery)”该如何理解:
代码一:
<html>
<head>
<title>代码一</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
(function(name){
alert(name);
})("GaoHuanjie");
</script>
</head>
<body> </body>
</html>
说明:在浏览器中运行上面代码。会弹出一个对话框。对话框的内容为GaoHuanjie。
上面代码中运行的JavaScript脚本和“(function($){...})(jQuery)”是一样的。也就是说“(function($){...})(jQuery)”中的函数会自己主动被运行,那么到底该如何理解“(function($){...})(jQuery)”呢?“(function($){...})(jQuery)”实际上表示的是已处于调用状态的匿名函数:function($){...}是定义的匿名函数,參数为$(之所以将參数声明为$是为了不与其它库冲突);为了调用该函数则在该匿名函数的后面添上了括号和实參(这里为jQuery),但又由于操作符的优先级,函数本身也须要用括号,所以又为匿名函数加入了括号。
释疑解惑:
一、我运行以下代码为什么报错——jQuery is not defined:
<html>
<head>
<title>代码二</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
(function($){
alert($);
})(jQuery);
</script>
</head>
<body> </body>
</html>
嗯嗯。浏览器在解析上述js脚本时确实会出现故障,假如为jQuery加入英文双引號,再次使用浏览器运行上述脚本则不会出错。为什么不加就会出错呢,呵呵呵,事实上这里的jQuery还是一个变量。假设为上述代码引入jQuery库,再次使用浏览器运行上述代码则不会出现故障:
<html>
<head>
<title>代码三</title>
<script type="text/javascript" src="./jquery-1.6.2.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
(function($){
alert($);
})(jQuery);
</script>
</head>
<body> </body>
</html>
【0分下载资源】
在引入jQuery库后之所以不会出错是由于jQuery库中定义了jQuery变量。
二、和$(function(){ })相比,(function($){...})(jQuery)的运行时机也是在网页DOM载入完成后才运行吗?
不是的,比方例如以下样例:
<html>
<head>
<title>代码四</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
(function(){
alert(document.getElementById("name").value);
})();
</script>
</head>
<body>
<input type="hidden" id="name" name="name" value="GaoHuanjie" />
</body>
</html>
上述样例在浏览器中运行的时候会报错。究其原因(function(){...})()函数的运行时机并非在DOM载入完成后才运行,而是随着页面自上而下来运行,假设将其改成例如以下代码则再次使用浏览器运行脚本则不会出现故障:
<html>
<head>
<title>代码五</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<input type="hidden" id="name" name="name" value="GaoHuanjie" />
<script type="text/javascript">
(function(){
alert(document.getElementById("name").value);
})();
</script>
</body>
</html>
一句话:“$(function(){ });”用于存放操作DOM对象的代码,运行当中代码时DOM对象已存在;“(function(){})(jQuery);”用于存放开发插件的代码,运行当中代码时DOM不一定存在。
Jquery—Jquery中的(function($){...})(jQuery)的更多相关文章
- Jquery中的(function($){...})(jQuery)
当你第一眼看到“(function($){...})(jQuery)”的时候,你有什么感觉?呵呵呵,我当时还是止不住的从心底里骂了一句——操,这他妈什么劳什子.时过境迁,对于现在无比倚重Jquery的 ...
- jQuery Mobile 中创建按钮
在 jQuery Mobile 中创建按钮 jQuery Mobile 中的按钮可通过三种方法创建: 使用 <button> 元素 使用 <input> 元素 使用 data- ...
- Jquery学习笔记:获取jquery对象的基本方法
jquery最大的好处是将js对html页面的操作(读写)进行了封装,隔离了浏览器的差异性,并简化了操作,和提供了强大的功能. 在web页面中,所有的js操作都是围绕操作dom对象来的.而jquery ...
- jQuery(1)——了解jQuery
jQuery 终于开始了jQuery的学习了,好开心,虽然感觉JavaScript并没有学好,尴尬.木事,咋们慢慢来.fighting [jQuery简介] jQuery是继Prototype之后又一 ...
- jQuery插件中的this指的是什么
在jQuery插件的范围里, this关键字代表了这个插件将要执行的jQuery对象, 但是在其他包含callback的jQuery函数中,this关键字代表了原生的DOM元素.这常常会导致开发者误将 ...
- jquery ui 中的插件开发
1 $.widget() 必须引用 <script src=")" type="text/javascript"></script> ...
- 详解jquery插件中;(function ( $, window, document, undefined )的作用
在jquery插件中我们经常看到以下这段代码 1 2 3 ;(function ( $, window, document, undefined ){ //函数体内具体代码 })(jQuery, wi ...
- jQuery入门(1)jQuery中万能的选择器
jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...
- jQuery入门(4)jQuery中的Ajax应用
jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...
随机推荐
- Dalvik和ART的区别
什么是Dalvik: Dalvik是Google公司自己设计用于Android平台的Java虚拟机.Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. ...
- bzoj 1834: [ZJOI2010]network 网络扩容 -- 最大流+费用流
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一 ...
- tarjan算法--cojs 1298. 通讯问题
cojs 1298. 通讯问题 ★ 输入文件:jdltt.in 输出文件:jdltt.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 一个篮球队有n个篮球队员, ...
- zoj 2966 Build The Electric System 最小生成树
Escape Time II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showP ...
- leetcode47. Permutations II
leetcode47. Permutations II 题意: 给定可能包含重复的数字的集合,返回所有可能的唯一排列. 思路: 这题全排列两种写法. 用hash表记录已经visit的数字,虽然看起来很 ...
- web前端开发必备压缩工具整理
影响网站打开时间有两个因素,一个是网页加载速度,另一个是网站页面的大小.网站加载速度与用户所处的网络环境及主机性能有关,而网站页面的大小则由网站开发者决定,最主要的就是web前端开发工程师的工作.本文 ...
- gdb -Mysql源代码级调试方法
http://blog.csdn.net/hitzhang/article/details/5985474 gdb -q --batch --ex "set height 0" - ...
- 【资料】wod地城掉落
•林中强盗第三层樵夫的皮带子蓝色毡帽面包刀(必定掉) •前往米勒巴赫的旅程第一层木棒邪恶强盗披风邪恶强盗匕首第二层地精盾第三层一瓶啤酒(必定掉大啤酒杯(必定掉 •喧嚷的酒吧第一层指挥棒(传奇等级10旅 ...
- 一些值得学习的Unity教程 (很实用的包括源码)
***********************项目源码******************************** 1. 降临 2. 沉睡缤纷乐 3. 千炮捕鱼 4. Photon官方FSP示例 ...
- Unity3D面试题总结
一.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作. 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标-> ...