建议1:减少全局变量污染
定义全局变量3种方式:
- 在任何函数外卖呢直接执行var语句
var f = 'value'
- 直接添加一个属性到全局对象上.(全局对象是所有全局变量的容器.在web浏览器中,全局对象为window)
window.f = 'value'
- 直接使用未经声明的变量,以这种方式是定义的全局变量被称为隐式的全局变量
f = 'value'
JS 语言最为糟糕的就是他对全局变量的依赖性.一个全局变量可以被程序的任何部分在任意时间改变,使得程序的行为被极大地复杂化.在程序中使用股权安居变量降低了程序的可靠性.
实际上,这些全局变量削弱了程序的灵活性,应该避免使用全局变量.努力减少使用全局变量的方法:在应用程序中传创建唯一一个全局变量,并定义该变量为当前应用的容器.
var My = {}; My.name = { "first-name":" first ", "last-name": " last " } My.parents = { mother :{ name:'小红', age: 37 }, father :{ name:'小明', age:40 } }
只要把多个全局变量都追加在一个名称空间下,讲显著降低与其他应用程序产生冲突的概率,应用程序也更加容易阅读.也可以使用闭包体将信息隐藏,它是另一种有效减少"全局污染"的方法.
在编程语言中,作用域控制着变量与参数的可见性和生命周期,这为程序开发提供了一个重要的帮助,因为它减少了名称冲突,并且提供了自动内存管理.
var foo = function(){ var a = 1, b= 2; var bar = function(){ var b = 3,c = 4; // a=1, b=3,c=4 a += b + c; // a=8, b=3,c=4 }; // a=1, b=2,c=undefined bar(); // a=21,b=2,c=undefined }
块级作用域(JS没有,C语言等才有):对于一个代码块,即包括在一对大括号中的语句,其中送一的所有变量在代码块的外部都是不可见的.定义在代码块中的变量在代码块执行介绍后会被释放掉.
Javascript不支持块级作用域,但是支持函数作用域,定义在函数中的参数和变量在函数外部是不可见的,并且在一个函数中的任何位置定义的变量在该函数中的热呢地方都可见.因为缺少块级作用域,最好的做法是在函数体的顶部生命函数中可能用到的所有变量.