JavaScript闭包函数的写法
<script type="text/javascript">
//通过js内置的函数构造器创建函数
var func=new Function('a','b','return a+b');
alert(typeof func);
alert(func(3,5)); //和下面的效果一样
var func1=function(a,b){return a+b};
alert(func1(6,7));
//作用域链
var a=1;
function test(){
var b=2;
return a;
}
test();
alter(b);
//scope chain 作用域链的效果
var a=1;
function test(){
var b=2;
function test1(){
var c=3;
alert(a); //1
alert(b); //2
alert(c); //3
return c;
}
test1();
}
test();
//词法作用域
function f1(){
var a=1; //局部变量 不存在共享的词法作用域
return f2();
}
function f2(){
return a;
}
alter(f1());//undefined
function f1(){
var a=1;
return f2();
}
function f2(){
var b=3;
//alert(b);
return a;
}
// alter(f1());//undefined
var a=55;
alert(f1()); //55
//对变量进行重复添加
a=656;
alert(f1());
第一种形式的闭包:
function f(){
var a='sunliyuan';
//返回闭包
return function(){
//返回父节a
return a;
}
}
// alert(a);//undefined
var test=f();
alert(test()); //sunliyuan
第二种形式的闭包:
var n;
function f(){
var a='sunliyuan';
n=function(){
return a;
};
}
f();
alert(n());
第三种形式的闭包:(能够读取其他函数内部变量的一个函数,将函数内部和外部链接起来的一个桥梁)
function f(param){
var n=function(){
return param;
}
param++;
return n;
}
var test=(456);
alert(test()); //457
暴露在外部:
function f1(){
//变量的值始终保持在内存中
var n=1;
//定义全局的变量
test=function(){
n+=1;
};
function f2(){
alert(n); //1
}
return f2;
}
var res=f1();
alert(res()); //undefined
test();
alert(res());
设置和读取:
var setValue,getValue;
(function(){
var n=0;
//设置和读取
getValue=function(){
return n;
};
setValue=function(x){
n=x;
}
})();
alert(getValue()); // 0
setValue(567);
alert(getValue()); //567
迭代器中的应用:
//迭代器中的应用
function test(x){
var i=0;
return function(){
return x[i++];
};
}
var next=test(['a','b','c','d','e']);
alert(next()); //a
alert(next()); //b
alert(next()); //c
alert(next()); //d
//循环中的应用:
function f(){
var a=[];
//应用了该值得指向
var i;
for(i=0;i<3;i++){
a[i]=function(){
return i;
}
}
return a;
}
var test=f();
alert(test[0]()); //3
alert(test[1]()); //3
alert(test[2]()); //3
function f(){
var a=[];
var i;
for(i=0;i<3;i++){
//创建自调用的函数
a[i]=(function(x){
return function(){
return x;
}
})(i);
}
return a;
}
var test=f();
alert(test[0]()); //1
alert(test[1]()); //2
alert(test[2]()); //3
//中间变量
function f(){
function test(x){
return function(){
return x;
}
}
var a=[];
var i;
for(i=0;i<3;i++){
a[i]=test(i);
}
return a;
}
var res=f();
alert(res[0]());
alert(res[1]());
alert(res[2]());
JavaScript闭包函数的写法的更多相关文章
- (转)Javascript匿名函数的写法、传参、递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...
- (转)javascript匿名函数的写法、传参和递归
(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...
- 不可不知的JavaScript - 闭包函数
闭包函数 什么是闭包函数? 闭包函数是一种函数的使用方式,最常见的如下: function fn1(){ function fn(){ } return fn; } 这种函数的嵌套方式就是闭包函数,这 ...
- Javascript闭包函数快速上手
闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以 ...
- JavaScript闭包函数&箭头函数调用与执行
一.标准的闭包函数 //一.标准的闭包函数 function A() { var i=0; ++i; console.log('i : ' + i); return function b() { re ...
- javascript闭包函数
JavaScript中的匿名函数及函数的闭包 1.匿名函数 2.闭包 3.举例 4.注意 1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没 ...
- JavaScript闭包函数的理解
闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...
- javascript中函数的写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Javascript闭包和C#匿名函数对比分析
C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...
随机推荐
- CodeForces 242E - XOR on Segment 二维线段树?
今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...
- 魔方公式xyz
x:(整个魔方以R的方向转动),x':(整个魔方以R'的方向转动) y:(整个魔方以U的方向转动),y':(整个魔方以U'的方向转动) z:(整个魔方以F的方向转动),z':(整个魔方以F'的方向 ...
- 最小公约数(欧几里得算法&&stein算法)
求最小公约数,最easy想到的是欧几里得算法,这个算法也是比較easy理解的,效率也是非常不错的. 也叫做辗转相除法. 对随意两个数a.b(a>b).d=gcd(a.b),假设b不为零.那么gc ...
- css中的clear的正真意义
网上包括w3cschool 的说法都是 不允许浮动.消除浮动 这样的说法,却看了还是不知道什么意思,一些地方说不通. 所以找到w3c css 的英文文档,如下是节选: 'clear'Values ha ...
- <display:column>属性解释
参考官方网站:http://www.displaytag.org/1.2/displaytag/tagreference.html 所有属性: autolink,class,comparator,de ...
- (四)JS学习笔记 - 模式 - 观察者模式
理解观察者模式 简单的讲,一个对象作为特定任务或是另一对象的活动的观察者,并且在这个任务或活动发生时,利用事件的形式通知观察者. 观察者的使用场合 当一个对象的改变需要同时改变其它对象,并且它不知道具 ...
- 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
Problem Description 求Sn=2+22+222+…+22…222(有n个2)的值. 例如:2+22+222+2222+22222(n=5),n由键盘输入. Input n Outpu ...
- spring 学习 AOP和IOC
自11开始接触三大框架,至今已俞5载, 当时风光无限的ssh,现在还在被广泛使用,并有扩大之势的只有spring了 spring主要特性,是广为使用的AOP(面向切面)和IOC(控制反转) 1.其中, ...
- Ajax动态刷新验证码图片
一> 原理: 把用代码生成的图片存放到硬盘当中,然后在返回存储路径把图片通过图片标签的 src 属性 自动加载到浏览器中 二> 步骤 1. 首先用GDI+ 绘图 把验证码图片给绘制出来 2 ...
- PHPExcel用法有感
今日项目需求导出excel.我用最简单的header头方式导出了,但是需求部门退回了,说不满足他们的需求,需要我按照他们的模板来导出. 然后想到了PHPExcel,没用过,走了不少弯路. 1.去官网下 ...