Lua,JavaScript的闭包和迭代器笔记
来源:互联网 发布:淘宝宝贝描述评分4.7 编辑:程序博客网 时间:2024/05/20 06:51
在JS中一直不太理解闭包这个概念 ,有幸在学习lua编程中重新理解了下闭包和迭代器
这个是书上的原文:
迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。在 Lua 中我们
常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。
迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来
自于哪里和将要前往哪里。闭包提供的机制可以很容易实现这个任务。记住:闭包是一
个内部函数,它可以访问一个或者多个外部函数的外部局部变量。每次闭包的成功调用
后这些外部局部变量都保存他们的值(状态)。当然如果要创建一个闭包必须要创建其外
部局部变量。所以一个典型的闭包的结构包含两个函数:一个是闭包自己;另一个是工厂(创建闭包的函数)。
--region *.lua--Date--此文件由[BabeLua]插件自动生成LuaTest = {}--这个是在 xlua中实现 下面这个是初始化函数LuaTest.init = function (args) iterTest() --SystemIter()endfunction list_iter (t) local i = 0 local n = #t -- 集合的大小 return function () i = i + 1 if i <= n then return t[i] end endendfunction iterTest() t = {10, 20, 30} iter = list_iter(t) -- creates the iterator while true do local element = iter() -- calls the iterator if element == nil then break end print(element) endendfunction SystemIter() t = {10, 20, 30} for i, v in ipairs(t) do print(v.."\t") endendreturn LuaTest--endregion
看到这里 我想到了js,这类语言也是有闭包这个概念的 ,所以我尝试着 码L码 恢复下js的功力 哈哈
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>testJs</title> </head><body><script>function buttonClick(){ var t = [1,23,32,222]; iter = listIter(t); while(true) { var temp = iter(); if(temp != null) console.log(temp); else break; }}function listIter(t){ var i = -1; return function() { i = i+1; //console.log(t.length); if(i<t.length) return t[i]; }}</script><button onclick = "buttonClick()">点击按钮</button></body></html>
以上 代码没什么难度 所以就懒得解释太多
阅读全文
0 0
- Lua,JavaScript的闭包和迭代器笔记
- Lua笔记11-迭代器和闭包
- Lua的upvalue和闭包
- 神奇的Lua:闭包和upvalue
- Lua的upvalue和闭包
- Lua的upvalue和闭包
- Lua的闭包
- Javascript闭包和this学习笔记
- Lua笔记8-模块和包
- 关于Lua的面向对象和闭包的理解
- 《Lua 5.0的实现》第五章 - 函数和闭包
- 关于lua的闭包(Closure)和Upvalue
- [Lua]lua闭包
- Lua笔记6-闭包1
- Lua笔记7-闭包2
- lua 函数的闭包
- lua 闭包的概念
- Lua闭包的理解
- 设计模式(四)— 简单工厂模式
- DBCP 源码初探
- nginx是如何处理请求的?
- Kaa IoT平台学习(一)
- ubuntu16.04下安装pycharm
- Lua,JavaScript的闭包和迭代器笔记
- 前端开发软件合集
- java删除文件(可以是目录)
- javascript笔记(一)
- milk-section1.3
- VS中代码对齐等快捷键
- 安装maven、配置maven的settings.xml
- 前缀表达式、后缀表达式和中缀表达式的计算(double型)
- Linux 向文件末尾追加命令