一个闭包的问题
lua吧
全部回复
仅看楼主
level 1
function add()
local i=0;
return function ()
i=i+1;
return i;
end
end
c1=add();
print(c1());
为何需要c1=add();这一步才能输出正确答案?而且print里面的c1必须加(),
按照我的理解c1就应该是add返回来的值才对啊
2018年10月30日 16点10分 1
level 6
正常赋值c1等价于c1(),加了括号就等价于c1()(),这就是调用内函数的操。
2018年11月01日 05点11分 2
level 9
函数是一等公民,可以赋值给变量,也可以当成返回值返回.
调用add()返回的是一个函数,然后你把它赋值给了c1,所以c1现在是个函数.所以再调用c1()
就相当于调用这个函数
" function ()
i=i+1;
return i"
而i是一个upvalue,保存在这个函数的"环境"(闭包)中.
2018年11月01日 16点11分 3
level 8
楼上说得对!
2018年11月05日 13点11分 4
1