函数声明(静态函数)
函数声明有个特征就是函数可以函数声明提前
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));
构造函数
构造函数的三部曲:
- 构造方法
- 定义属性
- 原型法定义函数,这样比较的节省内存
- 函数的继承,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);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。