cype
  • 6.2k

关于一个问题 为什么外层套一个立即执行函数

 阅读约 4 分钟

前言

个人输出的动力就是问题的深入 并不是看表皮功夫 然后呢今天就碰到了这个我认为不是问题的问题 偏偏就是问题 然后呢我就梳理一下我的答案说明一下 有任何疑问都可以评论

正题

这是题注的问题:

 这个是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. 接下来具体说一下我的答案 咀嚼一下 好让大家明白我为什么这么回答

主要从回收机制来说这个问题:

回收机制规则大概如下:

   1.全局变量不会被回收。
   2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
   3.只要被另外一个作用域所引用就不会被回收
第三点 显然题目中是符合的呢 也就是闭包的概念, proxy 第二参数行为函数 使用了var stack = []该变量,那么就不会进行回收 也就是闭包.

立即执行函数(immediately-inovked-function expression):
简称 IIFE。立即执行函数就是在定义的时候就立即执行,执行完以后就释放,包括函数内部的所有变量。

然后对应他的问题 我想知道这个问题是我答错了?
然后说我抬杠....

贴个链接问题地址

更新疑问 2019/9/3 16.55

这个问题问的是为什么外层套一个立即执行函数(IIFE) 我的出发点难道不是说这个IIFE起到什么作用? 不包IIFE有什么缺点?

难道回答一个独立作用域就解决了? 莫非不包这个IIFE function (value) {} 它没有独立作用域?

阅读 568更新于 9月3日
推荐阅读
走在前端路
用户专栏

分享yi些平时常用的 不错的文章,然后大家共同进步

15 人关注
8 篇文章
专栏主页
目录