關於一個問題 爲何外層套一個當即執行函數

前言

我的輸出的動力就是問題的深刻 並非看錶皮功夫 而後呢今天就碰到了這個我認爲不是問題的問題 恰恰就是問題 而後呢我就梳理一下個人答案說明一下 有任何疑問均可以評論es6

正題

這是題注的問題:express

這個是es6標準入門裏面的一段代碼:
 var pipe = (function () {
        return function (value) {
            var stack = [];
            var proxy = new Proxy({}, {
                get(arrObj, fnName) {
                    if (fnName === 'get') {
                        stack.reduce((val, fn) => {
                            return fn(val);
                        }, value);
                    }
                    stack.push(window[fnName]);
                    return proxy;
                }
            });
            return proxy;
        }
    })()

    var double = n => n * 2;
    var pow = n => n * n;
    var reverseInt = n => n.toString().split('').reverse().join('') | 0;
    pipe(3).double.pow.reverseInt.get;
    
    
    在這裏爲何要用到一個自執行的匿名函數呢, 徹底能夠直接寫

    var pipe = function(value) {
    
        .............
    }
以上是他的原問題,而後個人回答關鍵字是 回收機制還有 閉包還有 寫法區別 而後另一個答主說是 獨立做用域 寫法習慣而後我被pass了 另一個被採納了......
  1. 首先分析某答主的答案 是獨立做用域 固然每個函數聲明都有獨立做用域 我不否認可是和問題有關係嗎? 就被採納了...寫法習慣不敢苟同
  2. 接下來具體說一下個人答案 咀嚼一下 好讓你們明白我爲何這麼回答

主要從回收機制來講這個問題:

回收機制規則大概以下:segmentfault

1.全局變量不會被回收。
   2.局部變量會被回收,也就是函數一旦運行完之後,函數內部的東西都會被銷燬。
   3.只要被另一個做用域所引用就不會被回收
第三點 顯然題目中是符合的呢 也就是閉包的概念, proxy 第二參數行爲 函數 使用了var stack = []該變量,那麼就不會進行回收 也就是 閉包.

當即執行函數(immediately-inovked-function expression):
簡稱 IIFE。當即執行函數就是在定義的時候就當即執行,執行完之後就釋放,包括函數內部的全部變量。閉包

而後對應他的問題 我想知道這個問題是我答錯了?
而後說我擡槓....

貼個連接問題地址

更新疑問 2019/9/3 16.55

這個問題問的是爲何外層套一個當即執行函數(IIFE) 個人出發點難道不是說這個IIFE起到什麼做用? 不包IIFE有什麼缺點?

難道回答一個獨立做用域就解決了? 莫非不包這個IIFE function (value) {} 它沒有獨立做用域?函數

相關文章
相關標籤/搜索