JS-6函数表达式

创建函数

  1. 函数声明

    function functionName(arg0,arg1,arg2)
    {

    //函数体
    

    }
    函数有一个name属性,可以访问函数名

    函数声明提升:在执行代码之前会先读取函数声明。可以吧函数声明放在调用它的语句后面。

  2. 函数表达式

    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是一个静态的、由所有实例共享的属性。

模块模式

增强的模块模式

文章目录
  1. 1. 创建函数
  2. 2. 1. 递归
    1. 2.1. 1.使用arguments.callee()来指向正在执行的函数指针
    2. 2.2. 2.使用命名函数表达式来达成相同的结果
  3. 3. 2.闭包
    1. 3.1. 创建闭包
  4. 4. 模仿块级作用域
  5. 5. 私有变量
    1. 5.1. 静态私有变量
    2. 5.2. 模块模式
    3. 5.3. 增强的模块模式
,