Lua,JavaScript的闭包和迭代器笔记

在JS中一直不太理解闭包这个概念 ,有幸在学习lua编程中重新理解了下闭包和迭代器
这个是书上的原文:
迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。在 Lua 中我们
常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。
迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来
自于哪里和将要前往哪里。闭包提供的机制可以很容易实现这个任务。记住:闭包是一
个内部函数,它可以访问一个或者多个外部函数的外部局部变量。每次闭包的成功调用
后这些外部局部变量都保存他们的值(状态)。当然如果要创建一个闭包必须要创建其外
部局部变量。所以一个典型的闭包的结构包含两个函数:一个是闭包自己;另一个是工厂(创建闭包的函数)。

--region *.lua
--Date
--此文件由[BabeLua]插件自动生成

LuaTest = {}

--这个是在 xlua中实现   下面这个是初始化函数
LuaTest.init = function (args)
    iterTest()
    --SystemIter()
end

function list_iter (t)
    local i = 0
    local n = #t            --   集合的大小
    return function ()
                i = i + 1
                if i <= n then return t[i] end
            end
end

function 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)
    end
end

function SystemIter()

    t = {10, 20, 30}
    for i, v in ipairs(t) do
        print(v.."\t")
    end

end

return 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值