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的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...
随机推荐
- 为什么要使用Nginx?
这里做了些基准测试表明nginx打败了其它的轻量级的web服务器和代理服务器,同样也赢了相对不是那么轻量级的产品. 有人说这些基准测试是不准确的,因为在这样那样的环境下,做的比较不一致.我倾向同意基准 ...
- 推荐:室内定位API - indoor Location API
indoor.rs 公司近日开放了API,包括免费free的,收费fee的版本. 详情见这里,价格不是很贵哦 Open API支持Android/iOS等移动平台 提供工具,帮助进行地图和WiFi信号 ...
- oracle递归函数
oracle start with connect by 使用方法 oracle中 connect by prior 递归算法 Oracle中start with...connect by prio ...
- sqlite3经常使用命令&语法
http://blog.csdn.net/linchunhua/article/details/7184439 sqlite数据库仅仅用一个文件就ok,小巧方便,所以是一个很不错的嵌入式数据库,SQL ...
- C# 并行编程 之 并发集合 (.Net Framework 4.0)(转)
转载地址:http://blog.csdn.net/wangzhiyu1980/article/details/45497907 此文为个人学习<C#并行编程高级教程>的笔记,总结并调试了 ...
- jQuery 文本框得失焦点应用
一.文本框得失焦点一种是改变文本框的样式 得到焦点: 失去焦点: 二.文本框得失焦点另一种是改变文本框的值 得到焦点: 失去焦点: 三.jQ ...
- linux目录权限小记
r : 拥有读取目录结构列表的权限 x:拥有进入此目录的权限 w: 1: 建立新的档案和目彔: 2删除已经存在的档案和目录(无论该档案的权限为何!) 3能够重命名档案和目录: 4 能够移动目录里面的 ...
- 关于R文件丢失的一个问题
android studio在编辑布局文件时,一般为了省事,如TextView控件中的text属性这样写 android:text="<500",编译不会报错,但是运行时会出 ...
- noip2015运输计划
二分+LCA+查分前缀和 #include<iostream> #include<cstring> #include<cstdio> #include<alg ...
- C++第三课(2013.10.03 )
函数的默认参数: 1.函数的默认参数必须放在形参的右边而且在默认形参的右边不能出现没有无默认参数的形参 2.如果函数的声明给出了默认的参数,那么函数的实现就不能定义默认参 3.声明成员函数时没有给出默 ...