js:变量作用域错误理解分析
公司项目,点击勾选复选框的小游戏,可以简化为下图
需要点击哪个,哪个就变色,
做法:每个“控件”绑定函数,更改背景即可,于是写下错误代码:
结果clickHander函数一直是“undefined”,使用未声明的变量或函数全抛出致命错误而中断脚本执行
问题其实出在clickHander传参上,本来应该把当前点击的对象传给函数体,但是这里使用了cko[i],这个脚本里的i是全局变量,当点击时,传送的i是按照循环的最后一个值,所以会导致出错。
解决办法,
一、使用this传送当前“对象”,传送的是当前对象,也就是cko中的那个点击元素
二、使用匿名、闭包函数,将循环的i传到函数的局部变量里
这样解决了函数里错误调用了全局变量的问题。
其他比较有借鉴意义的是:
事件处理器中最好使用局部变量,应该尽量少使用全局变量, 环境变量, 会破坏封装, 使程序变的复杂
因为这个问题,还在被人奚落。。当然我们处于劣势。。这也是没办法的。。
最后更新于 2017-03-17 15:58:08 并被添加「」标签,已有 650 位童鞋阅读过。
此处评论已关闭