1. 程式人生 > 其它 >(function(){})()立即執行函式

(function(){})()立即執行函式

立即執行函式(function(){})()

關鍵詞: 立即執行函式 匿名函式 作用域

格式: (function())()

作用: 立即執行函式(function())()是匿名函式, 主要利用函式的作用域, 減少全域性變數的使用

解釋

前提知識

js中的函式通常有兩種命名方式,分別是 宣告式函式函式表示式

// 宣告式函式
function func() {}
// 函式表示式
const func = function() {}

分析

  1. 當我們的有些簡單函式只執行一次的時候,我們通常會這麼做

    // 宣告式函式
    function func () {console.log('I am a cat')}
    func() // I am a cat
    // 表示式函式
    const func = function () {console.log('I am a cat')} // 方法1
    func() // I am a cat
    const func = function () {console.log('I am a cat')} () // 方法2
    func // I am a cat
    
  2. 這時候我們會注意到函式的呼叫都要用到函式名, 那麼如果我們不想要這個函式名呢?
    可以發現函式表示式 方法2 中在函式宣告的時候直接將函式結果返回給了變數 func, 並且在呼叫func的時候成功返回結果.
    那麼是否可以這樣理解, 直接使用function () {console.log('I am a cat')}就可以實現我們的目的?

    function () { console.log('I am a cat')} () // Function statements require a function name
    
  3. 失敗了? 函式需要一個函式名!

  4. 這是因為當我們直接使用function () {console.log('I am a cat')}

    的時候, js直譯器會認為我們的函式是一個宣告式函式, 而非表示式函式. 因此必須使用一些特殊手段,讓js直譯器認出我們應該是函式表示式. 這樣的方法有很多,最常見的莫過於以下寫法. 這也是我最推薦的寫法

    (function () {console.log('I am a cat')}) () // I am a cat
    

其他寫法

// 知道即可,防止遇見了不認識
!function () {}();
~function () {}();
-function () {}();
+function () {}();
void function () {}();
(function () {}());
(function () {})();
// ES6 箭頭函式
(()=>{})()