博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
$(function(){})的执行过程分析
阅读量:6086 次
发布时间:2019-06-20

本文共 1825 字,大约阅读时间需要 6 分钟。

作者:zccst

首先,$(function(){})是$(document).ready(function(){})的简写形式。

 

在日常使用中,我们会把代码写到$(function(){})中,今天看看jQuery是如何做的(过程有点长)。

 

1,看jQuery入口,结论是$(function(){})是$(document).ready(function(){})的简写形式

$(function(){})相对于$()中传入了一个function类型的数据。根据源码:

jQuery.fn = jQuery.prototype = {

    init:function( selector, context, rootjQuery ) {

        if ( jQuery.isFunction( selector ) ) {

            return rootjQuery.ready( selector );
        }

    }

}

而rootjQuery就是$(document),见866行源码

// All jQuery objects should point back to these

rootjQuery = jQuery(document);

 

2,$(document).ready(function(){})是如何实现的呢?

从$().ready()的调用方式可以看出,ready是对象方法,见240行源码

ready: function( fn ) {

    // Add the callback
    jQuery.ready.promise().done( fn );

    return this;

},

可以看出,jQuery.ready.promise()是一个对象,调用了done(fn)方法,表明调用了一个延迟对象,再看一下jQuery.ready.promise()

1 jQuery.ready.promise = function( obj ) { 2     if ( !readyList ) { 3  4         readyList = jQuery.Deferred(); 5  6         // Catch cases where $(document).ready() is called after the browser event has already occurred. 7         // we once tried to use readyState "interactive" here, but it caused issues like the one 8         // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 9         if ( document.readyState === "complete" ) {10             // Handle it asynchronously to allow scripts the opportunity to delay ready11             setTimeout( jQuery.ready );//调用工具方法jQuery.ready12 13         } else {14 15             // Use the handy event callback16             document.addEventListener( "DOMContentLoaded", completed, false );17 18             // A fallback to window.onload, that will always work19             window.addEventListener( "load", completed, false );//回调函数在90行,也调用工具方法jQuery.ready20         }21     }22     return readyList.promise( obj );23 };

 

转载于:https://www.cnblogs.com/zccst/p/3749617.html

你可能感兴趣的文章
人月神话读后感(二)
查看>>
实验一 Java开发环境的熟悉
查看>>
(转) Oracle SQL优化必要的全表扫描思路分析
查看>>
iphone-common-codes-ccteam源代码 CCCommon.m
查看>>
What does the flowchart look like in top Journals?
查看>>
转:OAuth 2.0 介绍
查看>>
C#:解决WCF中服务引用 自动生成代码不全的问题。
查看>>
修改系统和MySQL时区
查看>>
数组的处理方法,filter的用法
查看>>
Python 集合方法总结
查看>>
Python的语言特性
查看>>
codeigniter 中使用 phpexcel
查看>>
JVM监控和调优常用命令工具总结
查看>>
机器学习实战-边学边读python代码(5)
查看>>
对forEach、for-in还有es6的for-of的一些整理
查看>>
基本类型间的类型转换(数值型)
查看>>
docker 容器管理
查看>>
JavaScript 作用域
查看>>
公钥私钥RSA加密
查看>>
MVC5使用SignalR进行双向通信(1)
查看>>