函数声明(静态函数)

函数声明有个特征就是函数可以函数声明提前

hello();
function hello(){
console.log('hello js');
}

函数表达式(Function expressions)

var hello2 = function(){
 console.log('hello2 js');
}
hello2();

这种方式命名,没有函数声明提前,这个方式也是自己比较喜欢用的方式。

匿名函数( anonymous)

(function(){
    console.log('message');
})()

也可以直接传入变量,jQuery源码用的比较的多,用匿名函数的好处就是可以减少命名的冲突,省的为了只执行一次的函数你还要去命名

(function(e){
    console.log(e);
})(2)

自动执行的其他的写法

var auto = (function(){
     console.log('auto message');
})() 

var auto = (function(){
    console.log('auto message2');
}())

回调函数(callback)

就是把函数当做变量,这个算是js中比较特别的地方,nodejs的异步回调的大体就是那样

function person(callback,name,age){
    callback(name,age);
}
function output(name,age){
    console.log(name+':'+age);
}
new person(output,'zs',18);

递归函数

关于递归,这个平时不敢去太多的应用,当时学习java的时候就很转,也就不为难自己了。简单的说就是自己调用自己:

function add(n){
    if(n<=1){
        return 1;
    }else{
        return n+add(n-1)
    }
}
// var i= add(4);
console.log(add(4));

构造函数

  • 构造函数首字母大写
  • this用法,指向本身,这个比较复杂,以后总结好了,弄明白了再细说
  • 闭包问题也是比较头痛的问题,留在以后。会造成内存消耗

构造函数的三部曲:

  • 构造方法
  • 定义属性
  • 原型法定义函数,这样比较的节省内存
  • 函数的继承,call,apply(用在传递数组)

函数的继承:

function Person(name,age){
    this.name=name;
    this.age=age;
}

Person.prototype.out=function(){
    var self=this;
    console.log(this.name+':'+this.age);
}

function Student(name,age,id){
    // Person.call(this,name,age);
    Person.apply(this,[name,age]);//或是用apply都行
    this.id=id;
}
Student.prototype.output=function(){
    var self=this;
    console.log(this.name+':'+this.age+';'+this.id);
}

new Person('lh',18).out();
new Student('KK',18,'XUESHENG').output();

函数的多态:

函数的重载:

主要是通过argument.length分别调用的,没有怎么用过

function f(x){}
function f(x,y){}
function f(x,y,z){}

总结最优的命名函数方法:

用构造方法生成成员变量,用原型法生成成员方法,减少内存的消耗

function Person(name,age){
    this.name=name;
    this.age=age;
    this.say();
    // 这样也行(构造方法分配成员方法),比较喜欢原型法构造函数
    this.say=function(){
        console.log(name+age);
    }
}
Person.prototype.say=function(){
    console.log(name+age);
}

黑色杜克
413 声望9 粉丝

爱技术,爱前段