我的輸出的動力就是問題的深刻 並非看錶皮功夫 而後呢今天就碰到了這個我認爲不是問題的問題 恰恰就是問題 而後呢我就梳理一下個人答案說明一下 有任何疑問均可以評論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了 另一個被採納了......
回收機制規則大概以下:segmentfault
1.全局變量不會被回收。 2.局部變量會被回收,也就是函數一旦運行完之後,函數內部的東西都會被銷燬。 3.只要被另一個做用域所引用就不會被回收
第三點 顯然題目中是符合的呢 也就是閉包的概念,proxy
第二參數行爲函數
使用了var stack = []該變量,那麼就不會進行回收 也就是閉包
.
當即執行函數(immediately-inovked-function expression):
簡稱 IIFE。當即執行函數就是在定義的時候就當即執行,執行完之後就釋放,包括函數內部的全部
變量。閉包
而後對應他的問題 我想知道這個問題是我答錯了?
而後說我擡槓....
這個問題問的是爲何外層套一個當即執行函數(IIFE) 個人出發點難道不是說這個IIFE起到什麼做用? 不包IIFE有什麼缺點?難道回答一個獨立做用域就解決了? 莫非不包這個IIFE
function (value) {}
它沒有獨立做用域?函數