cocos2d热加载的问题

dota 传奇的主程分析经验时谈到
“刀塔传奇支持游戏过程中动态加载lua代码,省去重新打开程序的时间。我们在脚本层封装了一个reload函数,用于在游戏运行时重新加载lua代码,实现原理也非常简单:先将先前required过的module从删除,然后重新require该所有module,相当于重新初始化脚本代码。这样我们又省去了关闭和重新打开程序的时间。刀塔传奇的UI场景是使用cocos2dx的场景scene,并在脚本层维护了一个scene的stack,reload 的时候将原先的scene先pop,然后使用reload后的代码和资源重新创建新的scene,还原原先的场景,省去了重复操作的时间。”

也就是通过 package.loaded[f_path] = nil require (f_path) 来实现的
假如场景中有一个button 注册了一个监听 listener:registerScriptHandler(onTouchBegin,cc.Handler.EVENT_TOUCH_BEGAN)
我修改了 onTouchBegin函数的话 ,就要重新创建这个场景 。
为什么吗?之前创建的场景已经缓存下来了 ,这个函数不是lua中的局部变量吗,每次修改后重新require,按理说应该会被重新赋值的啊 ,但是在实际测试的时候响应的还是测试前的,必须要重新创建该button才行,为什么吗?