立即執行函數
1.知識點
1.1 函數聲明:function fnName() {...}
;(函數聲明提升,以 fnName() 形式調用)
使用 function
關鍵字聲明一個函數,再給一個函數名,叫函數聲明;
1.2 函數表達式: var fnName = function() { ... }
; (後加括號立即調用並返回值給變量)
使用 function
關鍵字聲明一個函數,但未給函數命名,最後將匿名函數賦予一個變量,叫函數表達式;
1.3 匿名函數: function() { ... }
;
無名函數表達式
1.4 函數表達式加運算符立即執行
1.5原理:
1.5.1 js在"預編譯"階段, 會解釋函數聲明, 但卻會忽略表達式.
1.5.2 當js執行到function() {//code}();時, 由於function() {//code}在"預編譯"階段已經被解釋過, js會跳過function(){//code}, 試圖去執行();, 故會報錯; (不正確寫法: function(){}() )
1.5.3 當js執行到(function {// code})();時, 由於(function {// code})是表達式, js會去對它求解得到返回值, 由於返回值是一 個函數, 故而遇到();時, 便會被執行.
2.用法
2.1 最普通寫法
(function() { ... })()
(function(a) { ... })(12)
(function(){ ... }()) (function(a) { ... }
(12)
)
!function(a) { console.log(a); }(12345);
2.2 常見寫法
2.2.1 結合jq封裝插件(代碼在jq之後)
(function ($) {
$.fn.test111 = function () { alert(‘test‘) } })(jQuery);
$("#elementid").test111();
2.2.2 命名空間
var nameSpace = nameSpace || {};
(function () { nameSpace.ns = function () { } }; })();
3.意義:創建局部作用域、命名空間、閉包、功能封裝
立即執行函數