javascript函数的3种定义方式

3种方式定义函数 


1 function语句式

function test1(){         
	alert('我是test1');     
}                         
test1();                


2函数的直接量 ECMAScript   

var test2 = function(){         
	alert('我是test2');           
}                               
test2();                      

3function构造函数式    

var test3 = new Function("a" , "b" ,"return a+b;");  
alert(test3(10,20));                               


效率对比 

var d1 = new Date();                                  
var t1 = d1.getTime();                                
for(var i =0 ; i <100000;i++){                        
	function test1(){;}		//function语句的形式       
	//var test2 = new Function();                       
}                                                     
var d2 = new Date();                                  
var t2 = d2.getTime();                                
alert(t2 -t1); 	<span style="font-family: Arial, Helvetica, sans-serif;">		                              </span>
var d1 = new Date();                                  
var t1 = d1.getTime();                                
for(var i =0 ; i <100000;i++){                        
	//function test1(){;}		//function语句的形式       
	var test2 = new Function();                       
}                                                     
var d2 = new Date();                                  
var t2 = d2.getTime();                                
alert(t2 -t1); 			                              
function test1(){;}                        方式:输出2
var test2 = new Function();       方式:输出69
解析顺序问题 对于function语句式的函数,javascript解析器会优先的解释       
表示变量声明了 但是没有被赋值
var test2 = function(){       
	alert('2222');            
}                             

function f(){return 1;} 				// 函数1 	               
alert(f());		//返回值为4 说明第1个函数被第4个函数覆盖	                       
var f = new Function("return 2;");		// 函数2                 
alert(f());		//返回值为2 说明第4个函数被第2个函数覆盖                        
var f = function(){return 3;}			// 函数3                 
alert(f());	       //返回值为3 说明第2个函数被第3个函数覆盖	                   
function f(){return 4;} 				// 函数4                 
alert(f());		//返回值为3 说明第4个函数被第3个函数覆盖                        
var f = new Function("return 5"); 		// 函数5                 
alert(f());	//返回值为5 说明第3个函数被第5个函数覆盖	                           
var f = function(){return 6 ;}			// 函数6                 
alert(f());		//返回值为6 说明第5个函数被第6个函数覆盖			               
                                                               
输出顺序为:4、2、3、3、5、6


var k = 1 ;                                                   
function t1(){                                                
	var k = 2 ; //局部变量 k                                      
	function test(){return k ;} 	//function语句              
<span style="white-space:pre">	</span>//var test = function(){ return k};	//函数直接量               
	//var test = new Function('return k;');	// 构造函数的方式        
	alert(test());                                            
}                                                             
t1();			                                              
function test(){return k ;} 返回结果:2;
var test = function(){ return k};    返回结果:2;
var test = new Function('return k;'); 返回结果:1
原因:
var test = new Function('return k;'); 构造方法方式具有顶级作用域,相当于如下代码:
var k = 1 ;                                                           
<span style="color:#ff6666;">var test = new Function('return k;');	// 构造函数的方式  </span>                  
function t1(){                                                        
	var k = 2 ; //局部变量 k                                              
	//function test(){return k ;} 	//function语句                      
	//var test = function(){ return k};	//函数直接量                       
	//<span style="color:#ff6666;">var test = new Function('return k;');</span>	// 构造函数的方式                
	alert(test());                                                    
}                                                                     
t1();			                                                      
 

function语句

function构造函数函数直接量
兼容完全js1.1以上版本js1.2以上版本
形式句子表达式表达式
名称有名匿名匿名
性质静态动态静态
解析时机优先解析顺序解析顺序解析
作用域具有函数的作用域顶级函数(顶级作用域)具有函数作用域

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值