孔浩javaScript高级知识一

来源:互联网 发布:好听的网络歌曲虾米 编辑:程序博客网 时间:2024/05/17 06:21

head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>js01_hello</title>
 <meta name="author" content="Administrator" />
 <script type="text/javascript">
 //第一种定义方式
 function fn1() {
  alert("fn1");
 }
 //函数就是一个非常特殊的对象,是一个Function类的实例,其实在内存中存储的操作是通过一个键值对来存储的
 alert(typeof fn1);
 
 //由于函数是一个对象,所以可以通过如下方式定义
 //以下是通过函数的拷贝来完成赋值,两个引用并没有指向同一个对象
 var fn2 = fn1;(这个时候fn2指向了另外一块内存,只不过这个快内存的东西和fn1是一样的,有一个内存图)
 fn2();
 fn1 = function() {
  alert("fnn1");
 }
 /**
  * 函数虽然是一个对象,但是却和对象有一些区别,对象是通过引用的指向完成对象的赋值的,而函数却是通过对象的拷贝来完成的
  * 所以fn1虽然变了,并不会影响fn2
  */
 fn2();
 fn1();
 
 /**
  * 对于对象而言,是通过引用的指向来完成赋值的,此时修改o1或者o2会将两个值都完成修改
  */
 var o1 = new Object();(普通的对象时指针类型,他们指向了同一块内存,o2,01)
 var o2 = o1;
 o2.name = "Leon";
 alert(o1.name);
 </script>
</head>
<body>

 

----------------------------------------------------------------------------------------------------------

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>js01_hello</title>
 <meta name="author" content="Administrator" />
 <script type="text/javascript">
 // function sum(num1,num2) {
  // return num1+num2;
 // }
 var sum = function(num1,num2) {
  return num1+num2;
 }
 
 // function sum(num1) {
  // return num1+100;
 // }
 /**
  * 此时sum所指向的空间已经从有两个参数的函数变化到只有num1的函数中
  * 在调用的时候就只会调用只有num1的函数
  * 特别指出:函数的参数和调用没有关系,如果函数只有一个参数,但是却传入
  * 了两个参数,仅仅只会匹配一个
  * 所以在js中函数不存在重载
  */
 var sum = function(num1) {
  return num1+100;
 }
 
 //函数有如下一种定义方式
 /**
  * 如下定义方式等于定义了一个
  * function fn(num1,num2){
  *    alert(num1+num2);
  * }
  * 所以通过以下的例子,充分的说明函数就是一个对象
  */
 //自测,即使用的这样的方式,也是没有重载的(函数是对象是不存在重载的,在存在覆盖后面盖前面
 var fn = new Function("num1","num2","alert('fun:'+(num1+num2))");
 var fn = new Function("num1","alert('fun:'+(num1))");
 fn(12);
 fn(12,22);
 alert(sum(19));
 
 alert(sum(19,20));
 </script>
</head>

函数的另外一种定义方式

原创粉丝点击