上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下全局变量声明
代码维护成本比较高,所以要编写可维护的代码。下面分点介绍如何编写可维护的代码。
全局变量和局部变量
javascript通过函数来管理作用域。
在每个函数的表面可以通过this来访问全局对象。在浏览器中这个全局对象是window,即在全局作用域访问时:this === window
全局变量轻易出现定名冲突,所以要尽量少应用全局变量。在声明变量的时候一定要应用var来声明,未经声明被应用的变量会成为全局变量,这类情况下生成的全局变量为隐式全局变量
隐式全局变量和明白定义的全局变量间有些小的差异,就是通过delete
操作符让变量未定义的能力。
- 通过var创立的全局变量(任何函数以外的程序中创立)是不能被删除的。
- 无var创立的隐式全局变量(无视是不是在函数中创立)是能被删除的。
1 var a = 1; 2 b = 0; 3 //删除 4 delete a; 5 delete b; 6 //删除结果测试 7 console.log(typeof a);//number 8 console.log(typeof b);//undefined
1 function test(){ 2 var a = b = {name:"syh"}; 3 } 4 test(); 5 console.log( typeof a);//udefinded 6 console.log(typeof b);//object
1 function test(){ 2 var a,b; 3 a = b = {name:"syh"}; 4 ... 5 }
var a = 0; var b = 1; var c = 2; //应用一个var来声明 var a = 0, b = 1, c = 2; //推荐应用 var a = 0 ,b = 1 ,c = 2;
1 var param = "test"; 2 (function(){ 3 console.log(param);//undefined 4 var param = "test1"; 5 console.log(param);//test1 6 }())
for循环 和 for-in循环
for循环一般用来作数组循环
// 次佳的循环 for (var i = 0; i < myarray.length; i++) { //... } //推荐方式 for (var i = 0,arrLength = myarray.length; i < arrLength ; i++) { // ... }
for-in
循环应当用在非数组对象的遍历上,应用
for-in
进行循环也被称为“枚举”。虽然for-in循环也可用来遍历数组,但是不推荐这样做。
对象有一个hasOwnProperty()方法,可以用来过滤定义在原型上的属性和方法
// 对象 var man = { hands: 2, legs: 2, heads: 1 }; // 在代码的某个地方 // 一个方法添加给了全部对象 if (typeof Object.prototype.clone === "undefined") { Object.prototype.clone = function () {}; } // 1. // for-in 循环 for (var i in man) { if (man.hasOwnProperty(i)) { // 过滤 console.log(i, ":", man[i]); } } /* 控制台显示结果 hands : 2 legs : 2 heads : 1 */ // 2. // 反面例子: // for-in loop without checking hasOwnProperty() for (var i in man) { console.log(i, ":", man[i]); } /* 控制台显示结果 hands : 2 legs : 2 heads : 1 clone: function() */
hasOwnProperty()
的情势是过滤Object.prototype上的方法。像是:
(当初还没有理解)
1 for (var i in person) { 2 if (Object.prototype.hasOwnProperty.call(person, i)) { // 过滤 3 console.log(i, ":", person[i]); 4 } 5 } 6 //输出结果 7 /*name : syh 8 age : 10*/
var i, hasOwn = Object.prototype.hasOwnProperty; for (i in person) { if (hasOwn.call(person, i)) { // 过滤 console.log(i, ":", person[i]); } }
其他
避免应用eval();记着该咒语“eval()是魔鬼”。此方法接受恣意的字符串,并当作JavaScript代码来处理。
// 反面示例 setTimeout("myFunc()", 1000); setTimeout("myFunc(1, 2, 3)", 1000); // 更好的 setTimeout(myFunc, 1000); setTimeout(function () { myFunc(1, 2, 3); }, 1000);
parseInt()你可以从字符串中获得数值,该方法接受另一个基数参数,这经常省略,但不应当。要加上第二个参数:转化的进制
不要扩展内置原型
要应用 === 和 !== 不要应用 == 和 !=
文章结束给大家分享下程序员的一些笑话语录: 刹车失灵
有一个物理学家,工程师和一个程序员驾驶着一辆汽车行驶在阿尔卑斯山脉 上,在下山的时候,忽然,汽车的刹车失灵了,汽车无法控制地向下冲去, 眼看前面就是一个悬崖峭壁,但是很幸运的是在这个悬崖的前面有一些小树 让他们的汽车停了下来, 而没有掉下山去。 三个惊魂未定地从车里爬了出来。
物理学家说, “我觉得我们应该建立一个模型来模拟在下山过程中刹车片在高 温情况下失灵的情形”。
工程师说, “我在车的后备厢来有个扳手, 要不我们把车拆开看看到底是什么 原因”。
程序员说,“为什么我们不找个相同的车再来一次以重现这个问题呢?”