js:变量作用域错误理解分析

公司项目,点击勾选复选框的小游戏,可以简化为下图

mis

需要点击哪个,哪个就变色,

做法:每个“控件”绑定函数,更改背景即可,于是写下错误代码:

mis2

结果clickHander函数一直是“undefined”,使用未声明的变量或函数全抛出致命错误而中断脚本执行

问题其实出在clickHander传参上,本来应该把当前点击的对象传给函数体,但是这里使用了cko[i],这个脚本里的i是全局变量,当点击时,传送的i是按照循环的最后一个值,所以会导致出错。

解决办法,

一、使用this传送当前“对象”,传送的是当前对象,也就是cko中的那个点击元素

mis3

二、使用匿名、闭包函数,将循环的i传到函数的局部变量里

mis4

这样解决了函数里错误调用了全局变量的问题。

其他比较有借鉴意义的是:

事件处理器中最好使用局部变量,应该尽量少使用全局变量,  环境变量,  会破坏封装, 使程序变的复杂

因为这个问题,还在被人奚落。。当然我们处于劣势。。这也是没办法的。。

mis5

 

此处评论已关闭