谈谈javascript的函数表达式及其应用
我们都知道定义函数的方式有两种,一种是函数声明,另外一种就是函数表达式。
函数声明
语法为:function关键字后跟函数名。例如:
function functionName(arg0) {
//函数体
}
alert(functionName.name) // "functionName"
函数声明最主要的特征就是函数声明的提升,所以我们可以把函数声明放在调用它的语句的后面,因为执行代码前会先读取函数声明。比如:
hello();
function hello(){
alert("hello");
}
上面的代码可以在浏览器正常运行。
函数表达式
语法如下:
var functionName = function(arg0){
//函数体
};
alert(functionName.name) // ""
如上所示当我们输出函数名时返回了空字符串,因为function关键字后面没有标识符,这种情况下创建的函数为匿名函数。接下来我们就谈谈利用函数表达式所创建的匿名函数有什么应用。
应用
函数表达式最典型的应用就是模仿块级作用域,我们都知道JavaScript没有块级作用域,不过我们可以用函数表达式模仿块级作用域。形成独立作用域,从而避免全局污染。
操作方法:声明匿名函数,立马调用。
最经典的例子:
function createFunctions(){
var result = [];
for (var i=0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result;
}
createFunctions();
乍一看每个函数都应该返回自己的索引值,即位置0的函数返回0,1的返回1,以此类推。实际上每个函数都将返回10,因为这里的i是贯穿整个作用域的,我们把上面代码修改一下:
//写法1
(function(){
//这里是块级作用域
var result = [];
for(var i=0;i<10;i++){
result[i] = (function(num){
return function(){
return num;
};
}(i))();
}
return result;
})(); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
//写法2
var hasfunction = function(){
var result = [];
for(var i=0;i<10;i++){
result[i] = (function(num){
return function(){
return num;
};
}(i))();
}
return result;
}
hasfunction();
在立即执行函数执行的时候,i的值被赋值给num,同时创建返回num的闭包,从而result数组每个函数都有一个num变量的副本。
完。
谈谈javascript的函数表达式及其应用的更多相关文章
- JavaScript Function(函数表达式)
创建函数 创建函数的方式有两种:1.函数声明,2.函数表达式 函数声明的语法为 functionName(); //不会报错,函数声明提升function functionName(arg0,arg1 ...
- 【JavaScript】函数表达式
一.前言 接着上一篇的内容,继续学习JavaScript. 二.内容 函数的声明 function functionName(arg0,arg1,arg2){ //函数体 } ...
- 浅谈JavaScript的函数表达式(闭包)
前文已经简单的介绍了函数的闭包.函数的闭包就是有权访问另一个函数作用域的函数,也就是函数内部又定义了一个函数. var Super=function(num){ var count=num; retu ...
- JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》
函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一. ...
- 谈谈javascript的函数作用域
在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取 ...
- 浅谈JavaScript的函数表达式(递归)
递归函数,在前面的博客中已经简单的介绍了.递归函数是一个通过函数名称在函数内部调用自身的函数.如下: function fac(num){ if(num<1){ return 1; } else ...
- javascript中函数表达式的问题讨论
#函数表达式 ##函数声明和函数表达式的区别 函数的定义有两种形式,一种是函数声明,一种是函数表达式 使用声明时,要注意函数声明提升现象,比如说在if语句中使用声明会出错,但是表达式就不存在这个问题 ...
- JavaScript 函数表达式
JavaScript中创建函数主要有两种方法:函数声明和函数表达式.这两种方式都有不同的适用场景.这篇笔记主要关注的是函数表达式的几大特点以及它的使用场景,下面一一描述. 主要特点 可选的函数名称 函 ...
- js学习之函数声明与函数表达式区别[原创]
作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world. ...
随机推荐
- Js获取Gridview中Dropdownlist选中状态
在Gridview中加入Dropdownlist模板列,加入DropDownlist 是一种常用的操作,其中涉及到如何获取选择项和Gridview重新绑定两个要点. 如图 前台代码如下 <%@ ...
- RadioButton 和 RadioButtonList 比较
第一次接触RadioBttonList时候,觉得这个控件完全可以取代RadioButton,操作更加简便.直到今天,完成了一个小小的功能,才发现,尺有所短不是瞎掰的. 需求如下: Add Prorat ...
- //NSUserDeafult 图片的保存与读取
//NSUserDeafult保存图片数据到本地 -(void)saveImage:(UIImage *)image{ NSData* data=[NSKeyedArchiver archivedDa ...
- Code Review中应该关注的点
Magic number/string If statement, you should always use single line or brackets Provide default valu ...
- C++ Primer Plus 6th 读书笔记 - 第6章 分支语句和逻辑运算符
1. cin读取错误时对换行符的处理 #include <iostream> using namespace std; int main() { double d; char c; cin ...
- python调win32api调整屏幕分辨率
需要频繁切换屏幕分辨率,想写个脚本来实现,需要切换时运行一下就好 在网上查到,需要用windows的api,ChangeDisplaySettings 实现代码如下 import win32api d ...
- git删除分支
git branch -d branchname删除一个分支需要具备的条件: 1 如果待删除的分支没有upstream branch,那么待删除的分支需要合并到HEAD上,否则需要使用-D强制删除 2 ...
- Hibernate中HQL的日期差值计算,可计算相差多少秒
最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了. 网上找了一下总共的日期函数有一下几个: CURRENT_DATE() 返回数据库当前日期 时间函 ...
- juqery合成事件toggle方法
当指定元素被点击时,在两个或多个函数之间轮流切换. 如果规定了两个以上的函数,则 toggle() 方法将切换所有函数.例如,如果存在三个函数,则第一次点击将调用第一个函数,第二次点击调用第二个函数, ...
- Oracle数据库之间数据同步
这段时间负责某个项目开发的数据库管理工作,这个项目中开发库与测试数据库分离,其中某些系统表数据与基础资料数据经常需要进行同步,为方便完成指定数据表的同步操作,可以采用dblink与merge结合的方法 ...