文档章节

javascript函数的3种定义方式

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

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

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

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

小小小
06/08
0
0
JavaWeb01-HTML篇笔记(七)

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

我是小谷粒
04/28
0
0
细说JavaScript数据类型及转换

细说JavaScript数据类型及转换 JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 n1.toFixed...

开元中国2015
2015/07/13
0
0
深入浅出 JavaScript 中的 this

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

idea_biu
2012/09/05
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
AJAX 跨域请求 - JSONP获取JSON数据

原文地址:http://justcoding.iteye.com/blog/1366102 AJAX 跨域请求 - JSONP获取JSON数据 博客分类: Javascript /Jquery / Bootstrap / Web Asynchronous JavaScript and XML (Ajax ) 是驱......

water014300
2014/12/22
0
0
asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结

通常javascript代码可以与HTML标签一起直接放在前端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿;所以一般有良好开发习惯的程序员都会...

黄献
2012/11/04
0
0
JS与OC-WebView交互总结

OC与JS交互有两种方式,WKWebView和UIWebView,由于UIWebView比较耗内存,性能上不太好,所以苹果在iOS 8中推出了WKWebView。 一、与UIWebView交互 在UIWebView与JS交互中最简单的办法就是拦截...

乔兰伊雪
05/29
0
0
JavaScript面试大全(二)

eval()是做什么的? [eval()是“魔鬼”][1] null,undefined 的区别? [来看看大神阮一峰的解释吧][2] 写一个通用的事件侦听器函数。 [JS事件监听器][3] Node.js的适用场景? [NodeJS优缺点及...

百变茄
2014/06/05
0
0
关于javaScript的认识

NaN与Infinity和-Infinity不同的是,NaN不会与任何数值变量相等,可以用javaScript专门提供的isNaN()函数来判断某个变量是否为NaN。 Undefined类型的值只有undefined一个,该值用于表示某个变...

杨松坤
2012/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
11分钟前
1
0
python上传文件

//注意 <form action="/login/" method="post" enctype="multipart/form-data"> f=request.FILES.get('fafa') ff=open(f.name,mode='wb') for i in f.chunks(): ff.write(i) ff.close()......

南桥北木
24分钟前
0
0
CISCO VPN Client Reason 442 WIN8/10错误解决方案

http://jdkleo.iteye.com/blog/2163493 引用 http://my.oschina.net/cloudcoder/blog/220391?p={{currentPage 1}} 在使用cisco VPN 客户端登录时,产生Reason 442:Failedto enable Virtual......

chenfj_fer
27分钟前
0
0
信号量有没有容量限制?

之前一直误以为信号量初始化的时候那个初始化的值是信号量的“容量”,昨天同事指出了我的错误,最初我是不相信的,经过以下代码实践,证明了我的错误: Java版: import java.util.concurr...

锟斤拷烫烫烫
31分钟前
0
0
【RocketMQ】Message存储笔记

概述 消息中间件存储分为三种,一是保存在内存中,速度快但会因为系统宕机等因素造成消息丢失;二是保存在内存中,同时定时将消息写入DB中,好处是持久化消息,如何读写DB是MQ的瓶颈;三是内...

SaintTinyBoy
42分钟前
0
0
Android应用Context详解及源码解析

Android应用Context详解及源码解析 本文定位:优质文章收集 本文转载 1 背景 今天突然想起之前在上家公司(做TV与BOX盒子)时有好几个人问过我关于Android的Context到底是啥的问题,所以就马...

lichuangnk
今天
0
0
PostgreSQL的昨天今天和明天

PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。 这个起源于伯克利(...

闻术苑
今天
1
0
Mysql对自增主键ID进行重新排序

1,删除原有主键: ALTER TABLE `table_name` DROP `id`; 2,添加新主键字段: ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST; 3,设置新主键: ALTER TABLE `table_nam......

niithub
今天
0
0
福利篇:免费csdn vip账号分享

分享一个发布免费csdn vip账号的网站:啰嗦vip www.lostvip.com , 各种软件开发类的视频教程:慕课网、动脑学院、黑马各大培训机构VIP视频教程,非常不错!

在水一方发盐人
今天
1
0
Nginx+Tomcat搭建高性能负载均衡集群

一、 工具   nginx-1.8.0   apache-tomcat-6.0.33 二、 目标   实现高性能负载均衡的Tomcat集群:    三、 步骤   1、首先下载Nginx,要下载稳定版:      2、然后解压两个Tom...

码代码的小司机
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部