闭包的7种形式
来源:互联网 发布:技术军官知乎 编辑:程序博客网 时间:2024/05/20 09:06
返回值
最常用的一种形式是函数作为返回值被返回
var F = function(){ var b = 'local'; var N = function(){ return b; } return N;}console.log(F()());
函数赋值
一种变形的形式是将内部函数赋值给一个外部变量
var inner;var F = function(){ var b = 'local'; var N = function(){ return b; }; inner = N;};F();console.log(inner());
函数参数
闭包可以通过函数参数传递函数的形式来实现
var Inner = function(fn){ console.log(fn());}var F = function(){ var b = 'local'; var N = function(){ return b; } Inner(N);}F();
IIFE
由前面的示例代码可知,函数F()都是在声明后立即被调用,因此可以使用IIFE来替代。但是,要注意的是,这里的Inner()只能使用函数声明语句的形式,而不能使用函数表达式。详细原因移步至此
function Inner(fn){ console.log(fn());}(function(){ var b = 'local'; var N = function(){ return b; } Inner(N);})();
循环赋值
在闭包问题上,最常见的一个错误就是循环赋值的错误。关于其错误原因的详细解释移步至此
function foo(){ var arr = []; for(var i = 0; i < 2; i++){ arr[i] = function(){ return i; } } return arr;}var bar = foo();console.log(bar[0]());//2
正确的写法如下
function foo(){ var arr = []; for(var i = 0; i < 2; i++){ arr[i] = (function fn(j){ return function test(){ return j; } })(i); } return arr;}var bar = foo();console.log(bar[0]());//0
g(s)etter
我们通过提供getter()和setter()函数来将要操作的变量保存在函数内部,防止其暴露在外部
var getValue,setValue;(function(){ var secret = 0; getValue = function(){ return secret; } setValue = function(v){ if(typeof v === 'number'){ secret = v; } }})();console.log(getValue());//0setValue(1);console.log(getValue());//1
迭代器
我们经常使用闭包来实现一个累加器
var add = (function(){ var counter = 0; return function(){ return ++counter; }})();console.log(add())//1console.log(add())//2
类似地,使用闭包可以很方便的实现一个迭代器
function setup(x){ var i = 0; return function(){ return x[i++]; }}var next = setup(['a','b','c']);console.log(next());//'a'console.log(next());//'b'console.log(next());//'c'
0 0
- 闭包的7种形式
- 闭包的7种形式
- 闭包使用的三种形式
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- 闭包的概念、形式与应用
- Swift学习笔记——闭包的几种形式
- 【note】Swift之闭包表达式的几种简化缩写形式
- Python闭包的概念、形式与应用
- 转:闭包的概念、形式与应用
- swift3新路程(8)闭包的形式
- JNetpcap包处理函数的三种形式
- Dialog的7种形式
- [远程桌面]程mstsc连接Windows Server2008 未安装任何音频输出设备 启用声音音频解决
- Android -- Wifi连接流程分析
- 聊聊淘宝天猫个性化推荐技术演进史
- Android广播的发送与接收
- JSP数据交互
- 闭包的7种形式
- jsp 内置对象response,request,session 以及 cookie 对象的综合例子 和 include指令
- Office Online Server 文档在线预览编辑【速成篇】
- 浏览器同源策略的行为限制以及规避方法
- 如何写回调函数
- 关于vue.js的搜索方式的写法
- 二进制流读取图片
- C++学习笔记
- JPA学习--JPA中的UserTransaction的理解