$(function(){})與!function(){}()在頁面中的加載順序比較

大家都知道

$(function(){});

是 $(document).ready(function(){}) 的簡寫,它是在頁面DOM加載完畢之後自動執行。


!function(){}();

是一個匿名函數,而且類似這樣函數的寫法還有好多種,比如說

(function(){}());
(!function(){})();
~function(){}();

其實無論是括號,還是感嘆號,讓整個語句合法做的事情只有一件,就是讓一個函數聲明語句變成了一個表達式,本人就比較喜歡用 !function(){}(); 這個格式。


既然都是函數,那麼問題來了,到底!function(){}(); 是在頁面的什麼時候運行呢?它跟$(function(){}); 誰又會更早運行呢?

帶着這兩個問題我就新建了一個項目,寫了一個頁面測試了一下


<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="<%=path%>/chat/js/jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function() {
    console.log("自動加載了嗎? ");
    alert("$fuction已調用");

});

 !function(){console.log("調用了more");alert("!fuction已調用");}();
/* (function(){console.log("調用了more");alert("(fuction(){}())已調用");}()); */
/*  (function(){console.log("調用了more");alert("(fuction(){})()已調用");})(); */
function see() {
    alert("!function實在頁面加載前被調用,$function是在頁面加載完成後被調用");
}

</script>
<title>test</title>
</head>
<body>
<h2>$(function(){})與!function(){}()加載順序的測試</h2>

<div><span><input type="button"  value="查看測試結果" onclick="see()" /></span></div>

</body>
</html>

最後的運行結果是

圖1

圖2


所以由上面的測試,我得出來的結果是,!function(){}(); 是在頁面加載前就被調用,而$(function(){}); 是在DOM加載完之後被調用,幾乎是和頁面同時出來的。

由此可見,在頁面中,!function(){}(); 是要比 $(function(){}); 提前被加載。


這雖然不是什麼大試驗,但是記錄下來,方便供他人蔘考,也方便自己以後查閱


發佈了30 篇原創文章 · 獲贊 40 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章