请问这里为什么要用自执行函数包一层,为什么不直接写函数呢?

问题描述

 这个是es6标准入门里面的一段代码:
 var pipe = (function () {
        return function (value) {
            var stack = [];
            var proxy = new Proxy({}, {
                get(arrObj, fnName) {
                    if (fnName === 'get') {
                       return 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) {
    
        .............
    }

阅读 865
评论
    3 个回答
    • 2.2k

    外层的匿名立即执行函数应该是考虑到独立作用域的问题,但是这里仅仅是返回一个函数,除了这个当前作用域并没有其他变量,所以应该只是一种习惯而已。

      • 185

      这不简单吗,沙箱是为了分隔作用域,防止变量污染

          撰写回答

          登录后参与交流、获取后续更新提醒