-
最小全局变量
javascript通过函数管理作用域,函数内部声明的变量只能在函数内部访问,全局变量是在任何函数外面声明或者未声明直接使用。
-
全局变量的问题
导致不同javascript文件中的同名不同作用的代码产生冲突,即后者覆盖掉前者
//a是本地变量但是b是全局变量,这样即在没有注意的情况下产生了b的全局变量
function foo() {
//这是从右到左的赋值,首先,是赋值表达式b = 0,此情况下b是未声明的。这个表达式的返回值是0,然后这个0就分配给了通过var定义的这个局部变量a。换句话说,就好比你输入了:
var a = b = 0;
// ...
}
//这个就没有问题,因为提前声明了a,b变量
function foo() {
var a, b;
// ... a = b = 0; // 两个均局部变量
}
通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
在ES5严格模式中,未声明的全局变量会抛出错误
-
访问全局变量
var global = (function (globalObject) {
return globalObject; //就是当前所处环境中的全局变量
}(this));
//在许多的框架里我们看到的第一句其实就是这句话演变来的。
在严格模式下时,将代码包裹在一个即时函数中,然后从全局作用域中,传递一个引用指向this作为你即时函数的参数。
-
使用单var声明变量(即用逗号分隔,而不是每句变量声明前面都加var)
-
在每次的for循环中与保存要循环数组的长度
for (var i = 0, max = myarray.length; i < max; i++) {
// do something...
}
-
for-in循环
// for-in 循环 (过滤掉原型链上的方法)
for (var i in man) {
if (man.hasOwnProperty(i)) { // 过滤
console.log(i, ":", man[i]);
}
}
//更好的形式
var i, hasOwn = Object.prototype.hasOwnProperty;
for (i in man) {
if (hasOwn.call(man, i)) { // 过滤
console.log(i, ":", man[i]);
}
}
-
尽量不要拓展内置原型 (即在内置对象的原型链上添加新的方法)
-
避免隐式类型转换 (使用 === 和 !==)
-
避免使用eval()
网友评论