函数表达式
定义函数有两种方式:一种是函数声明,一种是函数表达式。
函数声明的语法:
function functionName(arg0,arg1,arg2){
//do something
}
函数声明有个重要特征就是函数提升,在执行代码之前会先读取函数声明,这意味着可以把函数声明放在调用它的语句后面。
函数表达式的语法:
var functionName = function(arg0,arg1,arg2){
//do something
};
递归
递归是一个函数通过名字调用自身的情况。例如:
function factorial(num){
if(num <= 1){
return 1;
}else{
return num*factorial(num-1);
}
}
模仿块级作用域
JavaScript没有块级作用域的概念,这意味着块语句中定义的变量,实际上是在包含函数中而非语句中创建的,例如:
function outputNumbers(count){
for(var i=0; i<count; i++){
alert(i);
}
alert(i);
}
可以使用匿名函数来模仿块级作用域,匿名函数的语法:
(function(){
//这里是块级作用域
})();
私有变量
任何函数中定义的变量,都可以认为是私有变量,因为不能在函数外部访问这些变量,私有变量包括函数的参数、局部变量和函数内部定义的其他函数。
我们把有权访问私有变量和私有函数的公有方法称为特权方法,有两种在对象上创建特权方法的方式。
第一种,在构造函数中定义特权方法
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(){
privateVariable++;
return privateFunction();
};
})();