• Jquery中的(function($){...})(jQuery)


    今天看到别人写的一段关于屏幕横向滚动的jquery代码发现了他用(function($){...})(jQuery)这样写的,作为初学者我们通常最习惯于用$(function(){  });这种样式,于是我查了一下看看其他搬砖的是这样解释道的,很详细很好理解于是记录如下:

    当你第一眼看到“(function($){...})(jQuery)”的时候,你有什么感觉?呵呵呵,我当时还是止不住的从心底里骂了一句——操,这 他妈什么劳什子。时过境迁,对于现在无比倚重Jquery的我,自感当时的自己是那么的无知,今天忙里偷闲,解释一下究竟“(function($) {...})(jQuery)”该怎样理解:

    代码一:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <title>代码一</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript">
        (function(name){
            alert(name);
        })("GaoHuanjie");
    </script>

    说明:在浏览器中运行上面代码,会弹出一个对话框,对话框的内容为GaoHuanjie。

    上面代码中执行的JavaScript脚本和“(function($){...})(jQuery)”是一样的,也就是说“(function($) {...})(jQuery)”中的函数会自动被执行,那么究竟该怎样理解“(function($){...})(jQuery)” 呢?“(function($){...})(jQuery)”实际上表示的是已处于调用状态的匿名函数:function($){...}是定义的匿名 函数,参数为$(之所以将参数声明为$是为了不与其他库冲突);为了调用该函数则在该匿名函数的后面添上了括号和实参(这里为jQuery),但又由于操 作符的优先级,函数本身也需要用括号,所以又为匿名函数添加了括号。
    释疑解惑:

    一、我运行下面代码为什么报错——jQuery is not defined:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <title>代码二</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript">
        (function($){
            alert($);
        })(jQuery);
    </script>
    嗯嗯,浏览器在解析上述js脚本时确实会出现问题,假如为jQuery添加英文双引号,再次使用浏览器运行上述脚本则不会出错,为什么不加就会出错呢,呵 呵呵,其实这里的jQuery还是一个变量,如果为上述代码引入jQuery库,再次使用浏览器运行上述代码则不会出现问题:
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <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>
    在引入jQuery库后之所以不会出错是因为jQuery库中定义了jQuery变量。

    二、和$(function(){ })相比,(function($){...})(jQuery)的执行时机也是在网页DOM加载完毕后才执行吗?

    不是的,比如如下例子:

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <title>代码四</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript">
        (function(){
            alert(document.getElementById("name").value);
        })();
    </script>
     
     
    <input id="name" name="name" value="GaoHuanjie" type="hidden">
    上述例子在浏览器中运行的时候会报错,究其原因(function(){...})()函数的执行时机并不是在DOM加载完毕后才执行,而是随着页面自上而下来执行,如果将其改成如下代码则再次使用浏览器运行脚本则不会出现问题:
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
         
            <title>代码五</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         
         
            <input id="name" name="name" value="GaoHuanjie" type="hidden">
            <script type="text/javascript">
                (function(){
                    alert(document.getElementById("name").value);
                })();
            </script>
        

    一句话:“$(function(){ });”用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在;“(function(){})(jQuery);”用于存放开发插件的代码,执行其中代码时DOM不一定存在。

  • 相关阅读:
    恭喜你,你毕业了
    用VB.Net2008制作安装程序详细步骤(菜鸟级别,高手勿进)
    交通标志结构计算软件开发进程
    【工作笔记002】在TC中建立应用于出行分布的阻抗矩阵(最短路矩阵)
    VB.Net 2008 引用Excel12
    开博,开播。
    【推荐】万物兴歇——衰老与寿命的演化
    一张交叉口渠划的彩色平面图
    萦绕在头脑中的思路_我的编程梦们 【更新至2010.06.03】
    8月份的回顾
  • 原文地址:https://www.cnblogs.com/dylanblog/p/4056097.html
Copyright © 2020-2023  润新知