Javascript實踐——函數_0

前言

在java世界裏遊覽一番後,實際項目中,因進度緊張,需要支撐同事做一段時間的前端開發,所用JavaScript框架爲Vue.js。說實話,在做Java後臺開發過程中,發現還有很多地方需要用到javascript的。比如android中的cordova和web服務端的nods.js等。作爲1個10年+面向對象編程經驗的老程序猿,決心花點精力研究下js技術,做一名更加稱職的全棧攻城獅。

準備

可謂工慾善其事必先利其器。鑑於本人只斷斷續續寫過一點js,對html/css和js基礎和框架並不是十分熟悉。所以決定從頭系統學習下js基礎,然後再做個小需求練手。

javascript基礎知識惡補措施:

1、選本經典的JavaScript書籍精讀;

2、使用Chrome開發者模式對書中知識點做下驗證;

3、在本博客中記錄學習心得

先在網上看了一些經驗人士的建議,大部分推薦的書籍爲《JavaScript高級程序設計》、《JavaScript權威指南》。而本人在2014年就買過一本《JavaScript權威指南》(第6版)(有點汗顏T_T)。再次看了下序言和目錄,確定其基礎語法與JavaScript核心DOM相關內容均包含其中,於是輕鬆選定權威指南作爲學習書籍。

基礎語法

1、JavaScript是一門弱類型、應用相當廣泛的編程語言(非常適合面向對象和函數式的編程風格);

2、JavaScript非常方便調試,基本上使用瀏覽器的開發者工具就可以完成調測;

3、函數定義和使用非常簡潔。比如定義兩個點的集合對象爲points:

var points = [{x:1,y:1},{x:3,y:3}];

其中,points對象表示一個數組,其中有2個元素,且第1、2個元素也爲對象,分別擁有x,y 2個屬性,代表x和y座標。可以再爲points對象添加一個公共函數,用於計算2個點之間的距離:

points.dist=function(){
    var p1 = this[0];
    var p2 = this[1];
    var a = p2.x-p1.x; 
    var b = p2.y-p1.y;
    return Math.sqrt(a*a+b*b);
};

其中,this表示points對象本身,因爲points對象本身是個數組,所以this[0]表示爲自身的第1個元素。

在Chrome瀏覽器開發者模式工具欄中輸入points.dist()後,會顯示結果爲:2.8284271247461903。調試非常方便快捷。

作爲函數編程的延伸,想出寫個f(n) 的JavaScript函數,要求如下:

1)輸入:fnsum(n)

2)輸出:1*2*3...n = xxxxx.

思路:寫3個函數,第1個函數用於拆解f(n)的表達式;第2個函數用於遞歸計算其f(n)的值;第3個函數彙總第1第2個函數的結果。

var fnprint = function(n){
    var temp = 1;
    var t="";
    while(temp<=n){
        t=t+temp+"*";
        temp++;
    };
    if(t.lastIndexOf('*')===t.length-1){
        t=t.substring(0,t.length-1);
    }
    return t;
}

var fnsum=function(n){
    if(n>1){
        return n*fn(n-1);
    }else if(n==1){
        return 1;
    }else{
        return 0;
    }
}

var fn=function(n){
    return fnprint(n)+"="+fnsum(n);
}

定義好上述3個方法後,執行fn(10)效果如下:(限於時間,目前沒有對上述方法做嚴格的邊界校驗)

1*2*3*4*5*6*7*8*9*10=3628800

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