1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 7 <script type="text/javascript"> 8 //第一种定义方式 9 function fn1(){ 10 alert("fn1"); //fn1 11 } 12 //函数就是一个非常特殊的对象,是一个Function类的实例,其实在内存中存储的操作是通过一个键值对来存储的 13 alert(typeof fn1()); //function 14 15 //由于函数是一个对象,所有可以通过如下方式定义 16 //此时 fn2指向与fn1一样的函数,但是js与java不同点: 17 // 1、java中key放置到堆栈中,函数放置到内存中,即此时fn1放置到堆栈中,函数value放置到内存中 18 // 此时fn2 = fn1 ,堆栈中重新创建一个对象fn2,虽然此时fn2指向的函数仍然与fn1指向的函数相同, 19 // 但是fn2 的函数已经与fn1 的函数已经不属于一块内存了,不像java指向的仍然还是一块内存区域 20 var fn2 = fn1; 21 fn2(); //fn1 22 fn1 = function(){ 23 alert("fnn1"); 24 } 25 //函数虽然是一个对象,但是却和对象有区别,对象是通过引用的的指向完成对象的赋值操作, 26 //而函数确实通过对象的拷贝来完成的 27 //所以fn1虽然改变了,但是不会影响fn2 28 fn2(); //fn1 29 fn1(); //fnn1 30 31 /** 32 * 对于对象而言,是通过引用的指向来完成赋值的,此时修改o1或者o2会将两个只完成修改,与java中的方式相同 33 * @type {Object} 34 */ 35 var o1 = new Object(); 36 var o2 = o1; 37 o2.name = "LEON"; 38 alert(o1.name); //LEON 39 40 41 </script> 42 43 </head> 44 <body> 45 46 </body> 47 </html>