javascript函数的3种定义方式
javascript函数的3种定义方式
指尖残雪 发表于2年前
javascript函数的3种定义方式
  • 发表于 2年前
  • 阅读 0
  • 收藏 0
  • 点赞 2
  • 评论 0

华为云·免费上云实践>>>   

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

共有 人打赏支持
粉丝 8
博文 73
码字总数 0
×
指尖残雪
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: