函数的定义方式
      
        //
      
      
        第一种定义方式
      
      
        function
      
      
         fn1(){
    alert(
      
      'fn1'
      
        );
}
      
      
        /*
      
      
        函数就是一个非常特殊的对象,是一个Function类的实例,
  其实在内存中存储的操作是通过一个键值对来存储的
      
      
        */
      
      
        
console.log(
      
      
        typeof
      
      
         fn1);
      
      
        //
      
      
        由于函数是一个对象,所以可以通过如下方式定义
      
      
        
//
      
      
        以下是通过函数的拷贝来完成赋值,两个引用并没有指向同一个对象
      
      
        var
      
       fn2 = fn1; 
      
        //
      
      
        两个的值虽然相等,但是指向的是不同的空间
      
      
        fn2();
fn1 
      
      = 
      
        function
      
      
        (){
    console.log(
      
      'fn1'); 
      
        //
      
      
        fn1的值改变了之后,不会影响fn2的值
      
      
        }
      
      
        /*
      
      
        
函数虽然是一个对象,但是却和对象有一些区别,对象是通过
引用的指向完成对象的赋值的,而函数却是通过对象的拷贝来完成的
所以fn1虽然变了,并不会影响fn2
      
      
        */
      
      
        
fn2();
fn1();
      
      
        /*
      
      
        
    对于对象而言,是通过引用的指向来完成赋值的,此时修改o1或者o2会将两个值都完成修改
      
      
        */
      
      
        var
      
       o1 = 
      
        new
      
      
         object();
      
      
        var
      
       o2 = o1; 
      
        //
      
      
        o1和o2其实指向了同一块空间,当修改o2的值的时候,o1也会被修改
      
      
o2.name = 'leo'
      
        ;
alert(o1.name);
      
    
  

