javascript基础知识 (三) 函数

咱只谈和其他语言不一样的地方

1>函数分别有:匿名函数 和 有名函数。

匿名的调用:function(){}

  • 在<script> 提取对象如:
var obj = document.getElementById();  
obj.onclick = function(){}//调用

有名的调用:function aa(){}

  • 同过标签中的系统事件响应:<div οnclick="func()"></div> func(){}
  • 自执行:aa(); //注意自执行时,函数内的this指向window。
  • 别名:可以用有名函数名代替匿名的事件函数:。
var obj = document.getElementById();      
obj.onclick = 别名;       
function 别名(){  };//调用

别名在函数的重复使用上有用,增强可读性

2> 函数自执行

什么样的函数能加()执行:

  1.  函数名();
  2. 函数表达式();
//第一种
a();
function a(){
    alert('A Hello!');
};
//第二种:有多种形式。下述是匿名函数,有名也可以这样
(function(){
alert('TEST1!');
})();
			
+function(){
alert('TEST2!');
}();

-function(){
alert('TEST3!');
}();
			
~function(){
alert('TEST4!');
}();
			
!function(){
alert('TEST5!');
}();
			
(function(){
alert('TEST6!');
}());

3> 函数 参数(实参 形参)

实参形参一一对应的情况不讲;

实参数(a1) < 形参数 (a2,b2) ;a2取a1,b2未定义

实参数(a1,b1,c1) >  形参数(a2,b2) ;取实参的a1,b1

实参数不确定:(arguments)

每个函数中都会有arguments的类数组,存储实参集合;

可以通过循环遍历

for (var i=0;i<arguments.length;i++ )

4> 函数作用域

作用域:

 每个函数执行时,会产生一个新的作用域

每遇到一个作用域,都会重新开始 定义和执行
                
 作用域链:

每一个作用域,当要找某个变量或者函数时,

先从自身找,自身没有的话,往上找(父作用域);

一直都找不到的话,报错;

只能从子作用域往父作用域找,不能父作用域往子作用域找

4.1> script中的解析顺序

两个不同的script标签,先执行完前一个的全部代码,再往下,前一个里面定义了的变量,后面的就可以使用
                
 作用域:
 script是最大的域

函数执行就是一个域

javaScript代码的执行顺序:

1:定义
 var定义变量,只定义变量名
 function定义,找出函数整体

 2:执行
除了定义,都是执行,从上往下

  • 案例1
            //代码
            var x = 5;
			
			a();

			function a(){
				alert( x );
				var x = 10;
			};

			alert( x );

            解析:
			/*
				1.定义:
					var x;
					function a(){
						alert( x );
						var x = 10;
					};
				2.执行:
					x = 5;
					a();   ===>   1.定义:
										var x;
								  2.执行:
										alert( x ); //undefined
										x = 10;
					alert( x ); // 5
			*/

 变量名和函数名同名情况:如果都是定义状态,以函数为准

			function a(){
				alert( 1 );
			};

			var a;
			alert( a );
            //结果弹出函数块

但是如果有执行的话,要看执行情况

			var a = 10;
			function a(){
				alert( 1 );
			};
			alert( a );
			/*
				1.定义:
					var a;
					function a(){
						alert( 1 );
					};
				2.执行:
					a = 10;
					alert( a );
			*/
  • 变量名和函数名同名情况 复杂案例2
                       alert( a );
			var a = 10;
			alert( a );
			function a(){alert(20)};
			alert( a );
			var a = 30;
			alert( a );
			function a(){alert(40)};
			alert( a );

			/*
				
				1.定义:
					function a(){alert(40)};
				2.执行:
					alert( a ); //块
					a = 10;
					alert( a ); //10
					alert( a ); //10
					a = 30;
					alert( a ); //30
					alert( a ); //30

			*/
  • 案例3
                var a = 10;
			alert( a );
			a();
			function a(){
				alert( 20 );
			};

			/*
				1.定义:
					function a(){
						alert( 20 );
					};
				2.执行:
					a = 10;
					alert( a ); //10
					a(); //报错
			*/
  • 案例4(将就看,csdn编辑器太垃圾,排版老是弄不好)
  • a(); // alert( a )
    			var a = function(){alert(1)};
    			a();
    			function a(){alert(2)};
    			a();
    			var a = function(){alert(3)};
    			a();
    
    			/*
    				1.定义:
    					function a(){alert(2)};
    				2.执行:
    					a(); ===> 1.定义
    							  2.执行
    								alert(2);	//2
    
    					a = function(){alert(1)};
    
    					a(); ===> 1.定义
    							  2.执行
    								alert(1);	//1
    
    					a(); ===> 1.定义
    							  2.执行
    								alert(1);	//1
    
    					a = function(){alert(3)};
    
    					a(); ===> 1.定义
    							  2.执行
    								alert(3);	//3
    					
    			*/

     

  • 案例5
			var a = 0;
			function fn(){
				alert( a );
				var a = 1;
				alert( a );
			};
			fn();
			alert( a );
			/*
				1.定义:
					var a;
					function fn(){
						alert( a );
						var a = 1;
						alert( a );
					};
				2.执行:
					a = 0;
					fn(); ===> 1.定义:
								var a;
							   2.执行:
								alert( a ); //undefined
								a = 1;
								alert( a ); //1
					alert( a ); //0
			*/
  • 案例6 
fn();
			alert( a );
			var a = 0;
			alert( a );
			function fn(){
				var a = 1;
			};

			/*
				1.定义:
					var a;
					function fn(){
						var a = 1;
					};
				2.执行:
					fn();  ==>	1.定义:
									var a;
								2.执行:
									a = 1;
					alert( a );//undefined
					a = 0;
					alert( a );//0
			*/
  • 案例7
fn();
			alert( a );
			var a = 0;
			alert( a );
			function fn(){
				a = 1;
			};

			/*
				1.定义:
					var a;
					function fn(){
						a = 1;
					};
				2.执行:
					fn();  ==>	1.定义:
								2.执行:
									a = 1;
					alert( a );//1
					a = 0;
					alert( a );//0
			*/
  • 案例8

  

			fn()();
			var a = 0;
			function fn(){
				alert( a );
				var a = 3;
				function c(){
					alert( a );
				};
				return c;
			};

			/*
				1.定义:
					var a;
					function fn(){
						alert( a );
						var a = 3;
						function c(){
							alert( a );
						};
						return c;
					};
				2.执行:
					fn();  ==>	1.定义:
									var a;
									function c(){
										alert( a );
									};
								2.执行:
									alert( a );//undefined
									a = 3;
									return c;
					fn()(); ==>	1.定义:
								2.执行:
									alert( a );//3
					a = 0;				
			*/
  • 案例9  终极案例
			var a = 5;
			function fn(){
				var a = 10;
				alert( a );
				function b(){
					a ++;
					alert( a );
				};
				return b;
			};

			var c = fn();
			c();
			fn()();
			c();
			/*
				1.定义:
					var a;
					var c;
					function fn(){
						var a = 10;
						alert( a );
						function b(){
							a ++;
							alert( a );
						};
						return b;
					};
				2.执行:
					a = 5;
					fn(); ==>	1.定义:
									var a;
									function b(){
										a ++;
										alert( a );
									};
								2.执行:
									a = 10;
									alert( a );//10
									return b;

					c = fn();
					c(); ==>	1.定义:
								2.执行:
									a ++;
									alert( a ); //11

					fn();  ==>	1.定义:
									var a;
									function b(){
										a ++;
										alert( a );
									};
								2.执行:
									a = 10;
									alert( a );//10
									return b;
					fn()(); ==>	1.定义:
								2.执行:
									a ++;
									alert( a ); //11

					c(); ==>	1.定义:
									a ++;
									alert( a ); //12
			*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值