创建函数
函数声明
function functionName(arg0,arg1,arg2)
{//函数体
}
函数有一个name属性,可以访问函数名函数声明提升:在执行代码之前会先读取函数声明。可以吧函数声明放在调用它的语句后面。
函数表达式
var functionName = function(arg0,arg1,arg2)
{//函数体
};
匿名函数 拉姆达函数 其name属性为空
匿名函数的执行环境具有全局性
1. 递归
1.使用arguments.callee()来指向正在执行的函数指针
严格模式下不能用
2.使用命名函数表达式来达成相同的结果
var factorial = (function f(num){
if(num <= 1){
return 1;
}else{
return num * f(num-1);
}
});
2.闭包
闭包是有权访问另一个函数作用域中的变量的函数。
创建闭包
方法:在一个函数内部创建另一个函数。
模仿块级作用域
javascript中没有块级作用域
可以用匿名函数来模仿块级作用域
(function(){
// 这里是块级作用域
})();
私有变量
包括:函数参数、局部变量和函数内部定义的其它函数。
静态私有变量
(function(){
var name = "";
Person = function(value){
name = value;
};
Person.prototype.getName = function(){
return name;
};
Person.prototype.setName = function(value){
name = value;
};
})();
var person1 = new Person("Nicholas");
console.log(person1.getName()); //"Nichoalse"
person1.setName("Greg");
console.log(person1.getName());//Greg
var person2 = new Person("Micheal");
console.log(person1.getName()); //Micheal
console.log(person2.getName());//Micheal
变量name是一个静态的、由所有实例共享的属性。