JavaScript Function(函数表达式)
创建函数
创建函数的方式有两种:1、函数声明,2、函数表达式
函数声明的语法为
functionName(); //不会报错,函数声明提升
function functionName(arg0,arg1,arg2) {
//do somethings;
}
alert(functionName.name); //输出 functionName
也可以采用函数表达式创建函数
functionName(); //会报错,此时 functionName 仅仅是 var functionName,其值为 undefined;
var functionName = function(arg0,arg1,arg2) {
//do somethings;
}
alert(functionName.name); //输出 ""
递归
当一个函数可以通过名字调用自身,说明该函数为 递归函数.
function functionName() {
// do somethings;
return functionName();
}
var another = functionName;
functionName = null;
another(); //报错, 因为找不到 functionName();
function functionName() {
// do somethings;
return arguments.callee(); //指向该函数的指针
}
var another = functionName;
functionName = null;
another(); //不报错.
闭包
了解闭包,首先了解函数的作用域。
函数作用域里的变量,会一级级的向上查找变量,直到找到为止,找不到则报错.
var a = 1;
function getA(){
alert(a); //当在当前作用域找不到变量时,会去父作用域查找该变量,直到找到为止,如果找不到,则报错.
}
getA(); //1;
但是,函数作用域外的变量,则访问不到函数作用域里的变量。
function setA(){
var a = 1;
}
setA();
alert(a); //报错.因为变量 a 不能访问到 setA 里的变量,且外部也没有 变量a
创建一个闭包函数,来访问函数里的值。
var a = 5;
function func(){
var a = 1;
return {
"get":function(){
alert(a);
},
"set":function(num){
a=num;
},
"getthis":function(){
alert(this.a);
}
}
} var a = func(); //闭包
a.get(); //输出 1;
a.set(2);
a.get(); //输出 2; var b = func(); //闭包
b.get(); //输出 1;
a.set(3);
b.get(); //输出 1;
a.get(); //输出 3;
由上个例子可见,闭包会造成内存占用比以前更多。因此要谨慎使用闭包。
模仿块级作用域
由于 JavaScript 没有块级作用域,会导致有些时候会出差错,得不到我们想要的结果。
function func() {
var i = 5;
for (var i =0;i<10;i++) {
//alert(i);
}
alert(i); //输出10; 并不是我们想要的10;
}
因此 可以利用 立刻执行的匿名函数,来模拟块级作用域。
function func() {
var i = 5;
(function(){
for (var i = 1;i < 10;i++) {
//alert(i);
}
}());
alert(i); //输出 5
}
JavaScript Function(函数表达式)的更多相关文章
- javascript:function 函数声明和函数表达式 详解
函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...
- JavaScript function函数种类(转)
转自:http://www.cnblogs.com/polk6/p/3284839.html JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通 ...
- JavaScript function函数种类介绍
JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) { ...
- JavaScript Function 函数深入总结
整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...
- 谈谈javascript的函数表达式及其应用
我们都知道定义函数的方式有两种,一种是函数声明,另外一种就是函数表达式. 函数声明 语法为:function关键字后跟函数名.例如: function functionName(arg0) { //函 ...
- 【JavaScript】函数表达式
一.前言 接着上一篇的内容,继续学习JavaScript. 二.内容 函数的声明 function functionName(arg0,arg1,arg2){ //函数体 } ...
- 浅谈JavaScript的函数表达式(闭包)
前文已经简单的介绍了函数的闭包.函数的闭包就是有权访问另一个函数作用域的函数,也就是函数内部又定义了一个函数. var Super=function(num){ var count=num; retu ...
- JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》
函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一. ...
- 浅谈JavaScript的函数表达式(递归)
递归函数,在前面的博客中已经简单的介绍了.递归函数是一个通过函数名称在函数内部调用自身的函数.如下: function fac(num){ if(num<1){ return 1; } else ...
随机推荐
- Wampserver #1045 无法登录 mysql 服务器
一是通过phpMyAdmin直接修改: 二是使用WAMP的MySql控制台修改. 第一种: ①在phpMyAdmin界面中点击[用户],将用户概况中的所有用户名为[root] 用户的密码都改为 ...
- H5版俄罗斯方块(1)---需求分析和目标创新
前言: 俄罗斯方块和五子棋一样, 规则简单, 上手容易. 几乎每个开发者, 都会在其青春年华时, 签下"xx到此一游". 犹记得大一老师在布置大程作业的时候提过: "什么 ...
- 启动运行下载gradle速度太慢,手动添加
启动运行下载gradle速度太慢,并且容易卡死(感谢群友ˋ狠ㄨ得意提供支持)---国内网络访问地址 我们经常运行项目的时候会需要进行下载gradle,不过由于网络或者和谐的问题经常下载需要花很长时间或 ...
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
- 应用aspose.word破解版实现word转pdf
import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import java.io.File; import java ...
- 关于nginx配置的不完全总结
请参考官方: http://wiki.nginx.org/HttpRewriteModule#Synopsis 关于缓存大小权限 error log 有如下日志:an upstream respons ...
- Xerces链接错误原因之/Zc:wchar_t-设置不一致
今天程序需要使用Xerces作为xml文件的解析与序列化工具,使用的是Xerces2.7.0版本.具体编译教程如下: 成功编译出了Xerces.dll和Xerces.lib.但是在链接到主工程的时候, ...
- Django中ImageField的使用
http://blog.csdn.net/u013690521/article/details/38777213 from django.db import models from django.co ...
- .net windows 服务创建、安装、卸载和调试
原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境 ...
- Emmet 真是个好东西
他的官网:http://docs.emmet.io/ 给广大程序员节省时间 #page>div.logo+ul#navigation>li*5>a{Item $}生产 <div ...