數據結構與算法描述讀書筆記01

第一章 JavaScript的編程環境和模型

1.1 JavaScript環境

  • JavaScript原來只能再瀏覽器上運行,現在可以作爲桌面程序執行,或者在服務器上執行。
  • 本書使用的是JavaScript shell,由Mozilla提供的JavaScript綜合編程環境SpiderMonkey的一部分
    說明:
    • 在計算機科學中,shell俗稱殼,是指爲使用者提供操作界面的軟件(命令解析器)。它接收用戶命令,然後調用相應的應用程序
    • 我的理解是:shell是用戶與計算機系統交互的中介。像雞蛋殼一樣,殼的內部是核心。

1.2 JavaScript編程實踐

1.2.1 聲明和初始化變量
  • JavaScript變量默認是全局變量,如果對一個未聲明的變量直接賦值,該變量會成爲全局變量。
  • 爲了養成良好的編碼習慣,使用變量前必須要先聲明!
  • 下面是一些聲明變量的例子:
    var number; 
    var name;
    var rate = 1.2;
    var greeting = "Hello, world!";
    var flag = false;

1.2.2 JavaScript中的算術運算符和數學庫函數
  • JavaScript使用標準的算術運算符:
    +(加)、-(減)、*(乘)、/(除)、%(取餘)

    說明:

    • Js中的除法運算並不會像其他語言一樣:兩個整數作 / 運算就能取整。它是正常的除法運算!
      比如說:5 / 3的結果是 1.666666666666666666667

    • Js的減法運算中,如果存在借位的情況,運算結果會出現誤差。
      比如說:3 - 2.1的結果是 0.899999999999999999999

  • Js的數學庫也就是Math對象中有很多數學運算的方法。
    

比如:

* Math.abs(x) 返回數的絕對值
* Math.floor(x) 向下舍入
* Math.pow(x,y) 返回x的y次冪
1.2.3 判斷結構

if語句和switch語句

1.2.4 循環結構

while循環和for循環

1.2.5 函數

Js提供兩種定義函數的方式,一種有返回值,一種沒有返回值(這種函數有時也叫做子程或void函數)

1.2.6 變量作用域
  • 變量的作用域是指變量在程序的哪些地方可以訪問。
  • Js的作用域是函數作用域
    函數內定義的變量只能在函數內可見;
    函數外定義的變量全局可見(擁有全局作用域)
    說明:
    Js中沒有塊級作用域,所以在for循環中的定義的變量其實屬於全局變量!
    
    for(var i = 1;i < 10; i++){
    
    }
    console.log(i)
    
    //輸出 i = 10
    
1.2.7 遞歸

function factorial(number){
    if(number == 1){
        return number;
    }else{
        return number * factorial(number - 1)
    }
}
console.log(factorial(5))

//輸出結果爲 120

遞歸調用的原理是:當一個函數被遞歸調用時,在遞歸沒有完成時,函數的計算結果暫時被掛起。是一個入棧、出棧的過程。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cnHdoMZ9-1582861565157)(en-resource://database/1294:0)]
說明:
有的遞歸深度超出了JavaScript的處理能力,這個時候我們就需要尋找迭代式的解決方案了。
任何可以被遞歸定義的函數,都可以被改寫成迭代式的程序。

1.3 對象和麪向對象編程

對象通過如下方式創建:定義包含屬性和方法聲明的構造函數,並在構造函數後面緊跟方法的定義。

function Checking(amount){
    this.balance = amount;//屬性
    this.deposit = deposit;//方法
    this.withdraw = withdraw;//方法
    this.toString = toString;//方法
}
說明:
this關鍵字用來將方法和屬性綁定到一個對象的實例上。
function deposit(amount){
    this.balance += amount;
}
function withdraw(amount){
    if(amount <= this.balance){
        this.balance -= amount;
    }
    if(amount > this.balance){
        console.log("Insufficient funds");
    }
}
function toString(){
    return "Balance:" + this.balance;
}

說明:

  • 上面的方法都是對象的成員方法,可以通過this關鍵字訪問這個對象的其它屬性或方法
  • 通過new關鍵字調用構造函數,創建實例對象。
var account = new Checking(500);
account.deposit(1000);
......

1.4 小結

編寫出讓人容易閱讀的代碼和編寫出讓計算機能正確執行的代碼同等重要!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章