jquery源码分析----jquery框架提炼

来源:互联网 发布:coc弓箭女王升级数据 编辑:程序博客网 时间:2024/06/03 17:19
//--------------------------------------------------------全局和局部------------------------------------------------------------------------
//1.jquery为了防止污染全局变量:把局部的变量和函数全写在了自执行函数中,闭包外面访问不了
//利用作用域链的知识可以知道,每个函数独自占用一片栈空间,外部访问不到,那么就只能去最底层的全局环境window中找,找不到就报is not defined未定义
//2.对外提供接口,挂在全局变量window中,即使在函数外边,也可以在最底层全局环境中找到
    (function(){
            var a = 10 ;
            function b(){
                alert(a);
            }
            window.c = function c(){
                alert(a);
            }
    })();
//利用作用域链的知识可以知道,每个函数独自占用一片栈空间,外部访问不到,那么就只能去最底层的全局环境window中找,找不到就报is not defined未定义
//alert(a);  //  a is not defined
//b();  //b is not defined
//挂在全局变量window中,在最底层可以找到

c();

//.......................................................jquery整体框架...................................................................
                (function(){
                    (21,94)  定义了一些变量和函数  jquery = function() {};
                    (96,283) 给JQ对象添加一些方法和属性
                    (285,347) extend :JQ的继承和方法
                    (349,817) jquery.extend() :扩展工具方法(静态方法)
                        实例方法:需要对象来调用,原生js用不了
                        $().css()   $().html()
                        静态方法:(工具方法):原生js可以用
                        $.trim()  $.proxy()
                    (877,2856) Sizzle :复杂选择器的实现
                    (2880,3042) Callbacks :回调对象 :函数的一个统一管理
                        function fn1(){ alert(1) }
                        function fn2(){ alert(2) }
                        var cb = $.Callbacks();
                        cb.add(fn1);
                        cb.add(fn2);
                        cb.fire();  //  fn1 和 fn2 都会执行
                        cb.remove(fn2); //移除了 fn2
                        cb.fire(); // 只有 fn1 会执行
                    (3043,3183) Deferred :延迟对象 :对异步的管理
                        setTimeout(function(){
                            alert(1);
                        },1000);
                        alert(2);
                        //利用延迟对象:先alert(2)  再alert(1)  可以如下写
                        var  dfd = $.Deferred();
                        setTimeout(function(){
                            alert(1);
                            //第二步: 回调
                            dfd.resolve();
                        },1000);
                        //第一步 : 先将函数存在延迟对象中
                        dfd.done(function(){
                            alert(2);
                        });
                    (3184,3295) support :功能检测
                    (3308,3652) data() :数据缓存
                        $("#div1").data("name","hello"); // 数据存储
                        $("#div1").data(); //数据获取
                    (3653,3797) queue() :队列管理 :函数顺序管理
                        三个动画:怎么确保他按顺序执行下去
                        $("#div1").animate({left:100});
                        $("#div2").animate({top:100});
                        $("#div3").animate({width:100});
                    (3803,4299) attr() pop() val() addClass()等 :对元素属性的操作
                    (4300,5128) on() trigger() : 事件操作的相关方法
                    (5140,6057) DOM操作 :添加 删除 获取 包装 DOM删选
                    (6058,6620) css() :样式的操作
                    (6621,7854) 提交的数据和ajax() : ajax()  load()  getJson()
                    (7855,8584) animate() : 运动 fideIn()  fideOut()
                    (8585,8792) offset() : 位置和尺寸的方法
                    (8804,8821) JQ支持模块化的模式
                    (8826)  window.jquery = window.$ = jquery = function(){};  //这解释了为啥juqery()和$()等价
                })()



1 0
原创粉丝点击