前言
个人输出的动力就是问题的深入 并不是看表皮功夫 然后呢今天就碰到了这个我认为不是问题的问题 偏偏就是问题 然后呢我就梳理一下我的答案说明一下 有任何疑问都可以评论
正题
这是题注的问题:
这个是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了 另外一个被采纳了......
- 首先分析某答主的答案 是独立作用域 当然每一个函数声明都有独立作用域 我不否定但是和问题有关系吗? 就被采纳了...写法习惯不敢苟同
- 接下来具体说一下我的答案 咀嚼一下 好让大家明白我为什么这么回答
【function|关于一个问题 为什么外层套一个立即执行函数】回收机制规则大概如下:
1.全局变量不会被回收。
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.只要被另外一个作用域所引用就不会被回收
第三点 显然题目中是符合的呢 也就是闭包的概念,立即执行函数(immediately-inovked-function expression):proxy
第二参数行为函数
使用了var stack = []该变量,那么就不会进行回收 也就是闭包
.
简称 IIFE。立即执行函数就是在定义的时候就立即执行,执行完以后就释放,包括函数内部的
所有
变量。然后对应他的问题 我想知道这个问题是我答错了?贴个链接问题地址 更新疑问 2019/9/3 16.55
然后说我抬杠....
这个问题问的是为什么外层套一个立即执行函数(IIFE) 我的出发点难道不是说这个IIFE起到什么作用? 不包IIFE有什么缺点? 难道回答一个独立作用域就解决了? 莫非不包这个IIFEfunction (value) {}
它没有独立作用域?
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- javascript|javascript中的数据类型转换