自執行函式的理解

K洛夫發表於2016-12-14

今天抽空研究一下jquery的原始碼,發現jquery的整體框架是從自執行函式開始的。(function(e, t) {})(window),今天就來好好研究下這個自執行函式是怎麼回事。

首先區分兩個概念,函式宣告,函式表示式。

function fn(){};這種是函式宣告的最通俗寫法,根本的標誌是需要有個函式名,函式宣告的好處,是可以在函式宣告之後,在程式碼執行的任何位置呼叫fn();都可以執行這段程式碼,fn();function fn(){};

再來看一下,函式表示式,var fn = function(){};  將一個匿名函式賦值給fn。和函式宣告的區別是,函式的呼叫只能在函式表示式的後面,否則會產生報錯。

var fn = function(){} ;  fn();  

OK,簡單討論了下函式宣告和函式表示式的區別,再來看下今天討論的豬腳自執行函式。

( function(){…} )()和( function (){…} () ),這兩種是自執行函式的兩種常見寫法,抽出相同的地方我們來分析一下;

一、就是函式體的後面都加的有小括號;二、最關鍵的部分,函式體的部分都是表示式,自身都處於括號的包裹之中。

(function(arg){alert(arg)})(aaa);!function(arg){alert(arg)}(aaa);+function(arg){alert(arg)}(aaa);同樣的把+,!替換成~,-,*

函式體依舊是表示式,整個函式依舊自執行。所以最後總結,自執行函式的首要特點是,函式體必須為函式表示式。

  關於自執行函式的特點,簡單提一個關於作用域的問題。可以通過自執行函式構造一個變數的容器,容器內部可以訪問外部的變數,

而外部卻訪問不到自執行函式內部的變數。有效避免了在全域性或區域性作用域中宣告的一些變數,可能會被其他人不小心用同名的變數給覆蓋掉。

相關文章