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

你可能感兴趣的:(JavaScript)