函数表达式
函数声明
function sum(num1,num2){ return num1+num2; }
函数声明提升
函数表达式
var sum=function(num1,num2){ return num1+num2 }
匿名函数——function关键字后面没有标识符
递归
递归——一个函数通过名字调用自身
递归阶乘函数
function factorial(num){
if(num<1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
递归阶乘函数
var factorial=(funciton f(num){
if(num<1){
return 1;
}else{
return num*f(num-1);
}
});
闭包
闭包——指有权访问另一个函数作用域中的变量的函数
创建闭包——在一个函数内部创建另一个函数
function createComparison(propertyName){
return function(object1,object2){
var value1=object1[propertyName];
var value2=object2[propertyName];
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
};
}
闭包与变量——闭包只能取得包含函数中任何变量的最后一个值
function createFunction(){
var result=new Array();
for(var i=0;i<10;i++){
result[i]=function(){
return i;
};
}
return result;
}
例:
function createFunction(){
var result=new Array();
for(var i=0;i<10;i++){
result[i]=function(num){
return function(){
return num;
};
}(i);
}
return result;
}
-this对象
var name="the window";
var object={
name:"my Object",
getNameFunc:function(){
var that=this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()(); //my Object)
例
var name="the window";
var object={
name:"my Object",
getNameFunc:function(){
return this.name;
};
};
alert(object.getNameFunc()(); //my window
模仿块级作用域
JavaScript没有块级作用域——块语句中定义的变量,实际上是包含在函数中
(function(){
//这里是块级作用域
})();
(function(){
var now=new Date();
if(now.getMonth()==0 && now.getDate()==1){
alert("Happy new year");
}
})();
私有变量
私有变量——局部变量、函数的参数、函数内部定义的其它函数
特权方法——在构造函数中定义特权方法
function MyObject(){
//私有变量和私有函数
var privateVariable=10;
function privateFunction(){
return false;
}
//特权方法
this.publicMethod=function(){
privateVariable++;
return privateFunction();
};
}
静态私有变量
私有变量——在私有作用域中定义私有变量或函数,创建特权方法
(function(){
//私有变量和私有函数
var privateVariable=10;
function privateFunction(){
return false;
}
//构造函数
myObject=function(){};
//特权方法
MyObject.prototype.publicMethod=function(){
var privateVariable=10;
return privateFunction();
};
})();
模块模式
var singleton=function(){
//私有变量和私有函数
var privateVariable=10;
function privateFunction(){
return false;
}
//创建对象
var object=new CustomType();
//特权方法
object.publicProperty=true;
object.publicMethod=function(){
privateVariable++;
return privateFunction();
};
return object;
}