编写可维护的javascript的总结

2018-08-27  本文已影响0人  praycis

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作为你即时函数的参数。

for (var i = 0, max = myarray.length; i < max; i++) {
   // do something...
}
// 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]);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读