函数声明和函数表达式

定义函数的常见方法:

函数声明的一个特征:函数声明提升;

函数声明如:

function fName(){

}

函数表达式也是常见的创建函数的方法:

var fName = function ( ) { 

}

函数表达式的另一种声明的方法:
(function f(){}); //()是一组分组操作符,它的内部只能包含表达式

注意:函数表达式与其他表达式一样,在使用前一定要进行赋值操作。在把函数当做值来使用的情况下,都可以使用匿名函数,

但是这不是匿名函数的唯一用途。

创建函数也可以再另一个函数中返回一个函数

function create ( ){ 
              
                  ..........
              
                 return function( ){
                           ........
                 };    
      
}              

函数递归:一个函数通过调用自身的情况

funtion fName (){


            if(num <= 1){
                    return 1;
            }else{
                    return num * arguments.callee( num -1 );//arguments.callee是一个指向当前函数的一个指针 
            }

}        

闭包:是指有权访问另一个函数作用域中的变量的函数,闭包会携带包含它的函数的作用域变量对象。

一个闭包的例子:

 1 var name = " 闭包";
 2                 
 3     var object = {
 4                     
 5         name : "JS",
 6                     
 7         getName : function(){
 8                     
 9             //这是一个闭包
10             return function(){
11                     return this.name;
12             };
13                         
14     }
15                         
16 };

由上面的例子谈下关于闭包的this对象,闭包的this对象一般情况下指向的是window;

 1 var name = " 闭包";
 2 
 3 var object = {
 4     
 5     name : "JS",
 6     
 7     getName : function(){
 8     
 9             //这是一个闭包
10             return function(){
11                 return this.name;
12             };
13         
14     }
15         
16 };
17 
18 console.log(object.getName()()); //输出闭包 this指向 window
 1 var name = " 闭包";
 2 
 3 var object = {
 4     
 5     name : "JS",
 6     
 7     getName : function(){
 8     
 9             //把包含函数的this引用复制给变量,在闭包中调用,改变闭包的this引用
10             
11             var _this = this;
12             
13             //这是一个闭包
14             return function(){
15                 return _this.name;
16             };
17         
18     }
19         
20 };
21 
22 console.log(object.getName()()); //输出JS this指向 object

 

posted @ 2014-10-11 17:27  宇宙第一小菜鸟  阅读(147)  评论(0编辑  收藏  举报