深入理解javascript學習筆記(一)編寫高質量代碼


一、變量

  • 全局變量

JavaScript的兩個特征,不自覺地創建出全局變量是出乎意料的容易。首先,你可以甚至不需要聲明就可以使用變量;第二,JavaScript有隱含的全局概念,意味着你不聲明的任何變量都會成為一個全局對象屬性(不是真正意義上的全局變量,可以用delete刪除

 

function  sum(x,y) {
    // result 未聲明,為隱式全局變量
    result = x + y;
    return result;
}

 

function  foo() {
    // 使用任務鏈進行部分var聲明,b為隱式全局變量
    var a = b = 1;    
}

建議:

function  (x,y) {
    var a ,b ;    
    a = b = 1;//a,b 為局部變量
}
  • var作用

通過var創建的全局變量(任何函數之外的程序中創建)是不能被刪除的。無var創建的隱式全局變量(無視是否在函數中創建)是能被刪除的。

// 定義三個全局變量
var global_var = 1; 
global_novar = 2; // 反面教材
(function () {
   global_fromfunc = 3; // 反面教材
}());

// 試圖刪除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true

// 測試該刪除
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"
  • 單var形式聲明變量

在函數頂部使用單var語句是比較有用的一種形式。所有未初始化但聲明的變量的初始值是undefined

function func() {
   var a = 1,
       b = 2,
       sum = a + b,
       myobject = {},
       i,
       j;
   // function body...
}
  • var散布問題
// 反例
myname = "global"; // 全局變量
function func() {
    alert(myname); //"undefined" 
var myname = "local"; alert(myname); // "local"
}
func();

等同於:

myname = "global"; // global variable
function func() {
   var myname; // 等同於 -> var myname = undefined;
   alert(myname); // "undefined"
   myname = "local";
   alert(myname); // "local"}
func();

二 for循環

  • 建議使用
function looper() {
   var i = 0,
        max,
        myarray = [];
   // ...
   for (i = 0, max = myarray.length; i < max; i++) {
      // 使用myarray[i]做點什么
   }
}

使用以下表達式代替i++

i = i + 1
i += 1

以下兩種循環方式更快

//第一種變化的形式:

var i, myarray = [];
for (i = myarray.length; i–-;) {
   // 使用myarray[i]做點什么
}

//第二種使用while循環:

var myarray = [],
    i = myarray.length;
while (i–-) {
   // 使用myarray[i]做點什么
}
  • for-in循環

應用在非數組對象的遍歷上,數組使用正常的for循環,對象使用for-in循環。使用hasOwnProperty()方法,當遍歷對象屬性的時候可以過濾掉從原型鏈上下來的屬性。

三 避免隱式類型轉換

  • 堅持使用===和!==

四 避免使用eval,以及避免給setInterval(), setTimeout()和Function()構造函數傳遞字符串,用函數代替。

五 parseInt()數值轉換

建議給基數參數賦值,

var month = "06",
      year = "09";
month = parseInt(month, 10);//開頭為0的字符串會被當做8進制處理
year = parseInt(year, 10);

六 編程規范

構造函數命名:MyConstructor();

一般函數命名:myFunction();

變量命名:firstName;

私有屬性或方法:_secondeName,

常量:PI,MAX;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM