欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript函数的3种定义方式

程序员文章站 2022-04-05 11:11:48
...

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以上版本
形式 句子 表达式 表达式
名称 有名 匿名 匿名
性质 静态 动态 静态
解析时机 优先解析 顺序解析 顺序解析
作用域 具有函数的作用域 *函数(*作用域) 具有函数作用域

转载于:https://my.oschina.net/zjcx/blog/679579