JavaScript中函数的生存周期是不是跟C语言里面一样,在函数结束之后就返还给内存了?就是在函数之外就不能再引用和写入函数里面的变量了?请举例说明。
Javascript和C语言一样也采用词法作用域(lexical scoping),就像你说的一样,这种特性叫“闭包”,每次调用函数都会创建新的对象来保存局部变量,并把这个对象添加到作用域链中,当函数返回的时候就从作用域链中把这个对象销毁,只有不存在嵌套函数或者其它指向这个函数的引用,它才会被当成垃圾回收,这一点和你的认识有点偏差。
function counter(){ var n = 0; return { count : function(){ return n++; }, reset : function(){ n = 0; } }; } var c = counter(),d = counter(); c.count(); d.count(); c.reset(); c.count(); d.count();