美文网首页我爱编程
<jQuery>总结:知识点

<jQuery>总结:知识点

作者: 玉圣 | 来源:发表于2018-05-26 17:56 被阅读17次

    一、jQuery基础和原理:

    1、jQuery的本质是一个闭包:
            (function( window, undefined ) {
                //.....
            })(window);
    

    闭包:一种立即执行的函数

            //方式一
            function test1() {
                var x = 10;
                console.log(x);   //结果是 10
            }
    
            test1();
    
            //------------------------------
    
            //方式二
            (function test1() {
                var x = 10;
                console.log(x);   //结果是 10
            })();
    

    说明:
    方式一和方式二的效果是一样的,其中就是将test1(); 中的函数名test1替换为上面定义的函数,两者是等同的

    2、jQuery为什么要使用闭包来实现:

    1.1、原因:
    为了避免多个框架的冲突
    1.2、解释:
    导入jQuery的框架:<script src="js/jquery-1.12.4.js"></script> 就相当于将js代码拷贝到当前页面中,因此在框架中定义的变量,有可能会和其他框架定义的变量相同,而产生被覆盖的可能。而由于在闭包中定义变量,变量的作用域就只是在当前闭包函数中,就可以解决别其他框架覆盖的可能。

            function test1() {
                //自身框架定义的变量
                var num = 1;
    
                //其他框架定义的变量,会覆盖上面定义的num
                var num = 2;
    
                console.log(num);   //结果是 2
            }
    
            test1();
    
    3、jQuery如何让外界访问内部定义的局部变量:

    在函数内部,将变量赋值给window存放,这样就可以通过window拿到函数内部的变量使用了
    1.1、例如:
    window.xxx = xxx;
    1.2、jQuery内部做法:

            (function( window, undefined ) {
                var jQuery = function () {
                    return new jQuery.fn.init();
                };
    
                window.jQuery = window.$ = jQuery;
            })(window);
    
    4、jQuery为什么要给自己传递一个window参数(在最后的括号中的window):

    1.1、为了方便后期压缩代码
    压缩代码是为了减少传输量,加载更快
    在压缩版本中,其中的所有参数都会被改成简写变量,如window就会变为e,类似如下样式

            (function(e, undefined) {
                var jQuery = function () {
                    return new jQuery.fn.init();
                };
    
                e.jQuery = e.$ = jQuery;
            })(window);
    

    这时,如果不传入window参数,那其中的e,并不知道是什么含义,而传入一个window参数,就可以明确其中的e就是传入的window
    1.2、为了提升查找的效率
    如果不传入window参数,在作用域中使用window的时候,就需要到外层作用域中去查找,没有找到的话,就会接着到再上一层查找,直到在作用域链中找到为止。
    因此,为了查找效率,直接使用传入的参数,而无需到外层作用域去查找。

            var param = 1;
            function p1() {
                var param = 10; //注释此行,打印上一层的param,结果为10
                function p2() {
                    var param = 20; //注释此行,打印上一层的param,结果为10
                    function p3() {
                        var param = 30; //注释此行,打印上一层的param,结果为20
                        console.log(param);
                    }
                }
            }
    
    5、jQuery为什么要给自己接受一个undefined参数:

    1.1、为了方便后期压缩代码
    1.2、在IE9一下的浏览器中,undefined可以被修改,为了保证内部使用的undefined不被修改,所以需要接受接收一个正确的undefined

           undefined = 998;
           console.log(undefined); //结果为undefined,IE9以下可能为998
    
    6、jQuery的原型对象处理
            (function( window, undefined ) {
                var jQuery = function () {
                    //等价于new jQuery.prototype.init();
                    return new jQuery.fn.init();
                };
    
                //......
    
                //jQuery.fn中的fn就是prototype
                jQuery.fn = jQuery.prototype;
    
                //......
    
                jQuery.prototype = {
                    constructor: jQuery
                };
    
                /*
                init的原型对象指向了jQuery的原型对象,所以就可以不用
                手动在调用init方法了,直接在创建jQuery的对象时,就同时给init赋值了。
                 */
                jQuery.prototype.init.prototype = jQuery.prototype;
    
                //......
    
                window.jQuery = window.$ = jQuery;
            })(window);
    

    二、函数:

    1、holdReady(b)方法:

    • 作用:暂停或开始执行ready方法

    示例:

    <button id="btn">点我啊</button>
    <script>
        $.holdReady(true);
    
        $(document).ready(function () {
            alert("helow jQuery!")
        });
    
        $("#btn")[0].onclick = function () {
            $.holdReady(false);
        };
    
    </script>
    

    三、事件:

    1、jQuery阻止事件冒泡和默认行为的方式:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jQuery事件</title>
        <script src="js/jquery-1.12.4.js"></script>
        <script>
            $(function () {
                $("#father").click(function () {
                    alert("father");
                });
    
                //阻止事件冒泡 方式一:
                $("#btn1").click(function () {
                    alert("click");
                    return false;
                });
                //阻止事件冒泡 方式二:
                $("#btn1").click(function (event) {
                    alert("click");
                    event.stopPropagation();
                });
    
                //阻止事件默认行为 方式一:
                $("#a1").click(function () {
                    alert("click");
                    return false;
                });
                //阻止事件默认行为 方式二:
                $("#a1").click(function (event) {
                    alert("click");
                    event.preventDefault();
                });
    
            });
        </script>
    </head>
    <body>
    <div id="father" style="width: 100px; height: 100px; background-color: red;">
        <button id="btn1">点我啊</button>
    </div>
    <a id="a1" href="https://www.baidu.com/">百度一下</a>
    </body>
    

    2、jQuery事件自动触发:

    1.1、使用方式:
    ”通过使用trigger(event)triggerHandler(event); 可以自动触发事件

                $("#btn1").click(function () {
                    alert("click");
                });
    
                //方式一:
                $("#a1").trigger("click");
                
                //方式二:
                $("#a1").triggerHandler("click");
    

    1.2、区别:

    • trigger 如果利用trigger自动触发事件,会触发事件冒泡和默认行为
    • triggerHandler 如果利用triggerHandler会自动触发事件,不会触发事件冒泡和默认行为
      1.3、特殊情况:
      对于 <a> 标签,如果使用trigger,则不会触发默认行为(仅为默认行为,事件冒泡会不影响)
    • 需求:
      如果需要让a标签自动触发默认行为,则可以使用如下方式:
      即在a标签中包裹一层span标签,将自动触发的事件加在span上即可。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jQuery事件</title>
        <script src="js/jquery-1.12.4.js"></script>
        <script>
            $(function () {
    
                $("#aFather").click(function () {
                    alert("aFather");
                });
                $("#span").click(function () {
                    alert("click");
                });
                $("#span").trigger("click");
            });
    
        </script>
    </head>
    <body>
    <div id="aFather" style="width: 100px; height: 100px; background-color: blue;">
        <a id="a1" href="https://www.baidu.com/"><span id="span">百度一下</span></a>
    </div>
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:<jQuery>总结:知识点

        本文链接:https://www.haomeiwen.com/subject/ghnmjftx.html