文档章节

javascript函数的3种定义方式

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 676
阅读 0
收藏 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以上版本
形式 句子 表达式 表达式
名称 有名 匿名 匿名
性质 静态 动态 静态
解析时机 优先解析 顺序解析 顺序解析
作用域 具有函数的作用域 顶级函数(顶级作用域) 具有函数作用域

本文转载自:http://blog.csdn.net/bq1073100909/article/details/48585819

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
私信 提问
JS高级之面试必须知道的几个点

深圳市人人聚财招前端啦 ~~~ 招前端,招前端,招前端,欢迎扫描加群,砸简历过来: 前言 这段时间突然发现JS原生好多东西都忘记了,但有些东西确实很重要,所以又重新再梳理一次。主要有函数的...

小小小
06/08
0
0
JavaScript的基本使用

一、JavaScript的简单介绍   JavaScript是一种属于网络的脚本语言(简称JS),已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaS...

码农47
03/15
0
0
JavaWeb01-HTML篇笔记(七)

.1 案例三:完成对注册页面的数据的简单校验.1.1.1 需求: 对注册页面的数据进行非空的简单校验!!!如果有某个值没有输入,点击提交,弹出一个对话框进行提示!! 1.1.2 分析:1.1.2.1 技术分...

我是小谷粒
04/28
0
0
JS调用PHP 和 PHP调用JS的方法举例

1、JS方式调用PHP文件并取得PHP中的值 举一个简单的例子来说明: 如在页面test_json1中用下面这句调用: <script type="text/javascript" src="http://callmewhy.sinaapp.com/index.php/test/t...

daniel-john
2014/04/11
0
1
深入浅出 JavaScript 中的 this

在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象。一般在编译期确定下来,或称为编译期绑定。而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就...

idea_biu
2012/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
1
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
7
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
3
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
5
0
RxJava threading

因为Rx针对异步系统设计,并且Rx也自然支持多线程,所以新的Rx开发人员有时会假设Rx默认是多线程的。在其他任何事情之前,重要的是澄清Rx默认是单线程的。 除非另有说明,否则每次调用onNex...

woshixin
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部