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的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ... 
随机推荐
- 最长回文字符串(manacher算法)
			偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ... 
- poj 3181 Dollar Dayz (整数划分问题---递归+DP)
			题目:http://poj.org/problem?id=3181 思路:将整数N划分为一系列正整数之和,最大不超过K.称为整数N的K划分. 递归:直接看代码: 动态规划:dp[i][j]:=将整数i ... 
- 广播接收者 BroadcastReceiver 示例-1
			广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者.广播作为Android组件间的通信方式,可以使用的场景如下: 1 ... 
- .NET基础拾遗(8)ADO.NET与数据库开发基础
			1.1 ADO.NET支持哪几种数据源? ① System.Data.SqlClient .NET程序员最常用的了.通过OLEDB或者ODBC都可以访问,但是SqlClient下的组件直接针对MSSQ ... 
- 网站项目后台的目录命名为admin后,网页莫名其妙的变样了
			这是我的第一篇博客文章,与其说是分享经验,倒不如说是求助 最近因为要完成一个课程设计,在拿一个现成的项目过来改,要用到select下拉菜单,可是发觉怎么我的这个下拉菜单怎么变样了 刚开始它是这样的 感 ... 
- Request.ServerVariables 服务器环境变量
			Request.ServerVariables["Url"] 返回服务器地址 Request.ServerVariables["Path_Info"] 客户端提 ... 
- ORACLE模拟临时文件、日志成员、口令文件丢失情况与恢复【weber出品】
			一.临时表空间文件.日志文件和口令文件都属于非关键性文件,因为这些文件丢失后并不会影响到整个数据库的完整性. 但是,当这些文件丢失后我们需要快速的找回这些文件.接下来我将模拟临时表空间文件.日志文件和 ... 
- 华为oj 统计字符串不同字符
			#include <stdio.h> #include <string.h> int firstSingle(char *str) { int hash[128]={0}; f ... 
- C# 读取EXCEL数据
			/// <summary> /// 读取EXCEL数据 /// </summary> /// <param name="Path">< ... 
- ie6兼容性
			文本重复Bug 在IE6中,一些隐藏的元素(如注释.display:none;的元素)被包含在一个浮动元素里,就有可能引发文本重复bug.解决办法:给浮动元素添加display:inline;. 躲猫 ... 
