【 在 ottffsse (nothing) 的大作中提到: 】
: 前者这个主要是js自身的设计问题——块没有局部变量;下一版本可能用let解决。(我觉得设计上var 两次应该报错才对---edit:发现下一版本js就不允许let两次同一变量)。
: 后者是closure的问题,跟js关系不大吧——换个语言还不是如此?除非不用closure
closure是从函数式编程(确切的说是从scheme)里面来的,那里面一般都不会使用变量,甚至根本就不能用变量。像ML里面,就算用了变量,closure的capture也是by value而不是by ref的,所以不会出这样的问题
C++11里面的closure如果直接写也是by value,加上了&才是by ref
所以说,这个问题虽然其它语言也有,但是javascript是最严重的
--
修改:nimi FROM 114.244.145.*
FROM 114.244.145.*