對自執行函式的理解

2021-08-13 17:50:08 字數 1379 閱讀 6098

函式宣告:使用關鍵字function宣告乙個函式,再指定乙個函式名

function

fnname

()

函式表示式:使用關鍵字function宣告乙個函式,但是不指定函式名,將匿名函式賦予乙個變數,叫函式表示式

var fnname  = function

()

匿名函式:使用關鍵字function宣告乙個函式,但是不指定函式名,叫匿名函式

function

()

js引擎在解析**時會對函式宣告進行「函式宣告提公升」(function declaration hoisting),而函式表示式則不會提前,必須等到解析到所在行時,才會解析函式表示式:

console.log(fn); // function

fn()

function fn()

console.log(fn); // undefined

varfn = function ()

// 第二個函式相當於:

var fn;

console.log(

fn); // undefined

fn = function ()

函式表示式加括號可以立即執行該函式,函式宣告不可以

function

fnname

()() // 報錯

var fnname = function

() () // 正常執行

要想立即執行,函式必須是函式表示式,不能使函式宣告,而在function前面加上!、()、+、-、=等運算子,都可以將函式宣告轉換成為函式表示式,告訴js引擎這是乙個函式表示式,不是函式宣告,所以可以在後面加括號,並且立即執行函式

(function

(a) )(123)

// 另一種寫法

(function

(a) (123))

用這種寫法可以模仿乙個私有作用域,用匿名函式作為乙個容器,容器內部可以訪問外部變數,外部環境不能訪問容器內部變數

所以( function() )()內部定義的變數不會和外部的變數發生衝突,俗稱「匿名包裹器」或「命名空間」。

var test = 100;

(function

(a) (123));

console.log(x)//undefined

jquery使用的就是這種方法,將jquery**包裹在( function (window,undefined) (window)中,在全域性作用域中呼叫jquery**時,可以達到保護jquery內部變數的作用。

對自執行匿名函式的理解

問題 我一直以來對自執行匿名函式就不是太理解尤其對其寫法 function 感覺很困惑。現在對這種寫法,為什麼這樣寫有了乙個相對清晰的認識。12 en 37816 17 這段 等價於下面這段 en 可以看到,第二段 只是在匿名函式後面直接加上乙個括號,相當於第一段 的test 那麼自執行匿名函式的形...

對自執行函式與閉包的理解

對自執行函式與閉包的理解 function 推薦使用這個 function 但是這個也是可以用的 由於括弧 和js的 異或,逗號等操作符是在函式表示式和函式宣告上消除歧義的 所以一旦解析器知道其中乙個已經是表示式了,其它的也都預設為表示式了 說白的,下邊這三行,因為有了 他們後邊的式子不會再報錯了,...

自執行函式

var a 2 function foo console.log a 2 由於函式被包含在一對 括號內部,因此成為了乙個表示式,通過在末尾加上另外乙個 可以立即執行這個函式,比如 function foo 第乙個 將函式變成表 達式,第二個 執行了這個函式。這種模式很常見,幾年前社群給它規定了乙個術...