<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闭包函数的写法的更多相关文章

  1. (转)Javascript匿名函数的写法、传参、递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http: ...

  2. (转)javascript匿名函数的写法、传参和递归

    (原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-0 ...

  3. 不可不知的JavaScript - 闭包函数

    闭包函数 什么是闭包函数? 闭包函数是一种函数的使用方式,最常见的如下: function fn1(){ function fn(){ } return fn; } 这种函数的嵌套方式就是闭包函数,这 ...

  4. Javascript闭包函数快速上手

    闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以 ...

  5. JavaScript闭包函数&箭头函数调用与执行

    一.标准的闭包函数 //一.标准的闭包函数 function A() { var i=0; ++i; console.log('i : ' + i); return function b() { re ...

  6. javascript闭包函数

    JavaScript中的匿名函数及函数的闭包   1.匿名函数 2.闭包 3.举例 4.注意 1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没 ...

  7. JavaScript闭包函数的理解

    闭包就是一个函数能够访问其函数外部作用域中的变量,即在外面可以调用函数中的函数的变量,其实他就是将函数内外部连接起来的桥梁 闭包三大特点: 1. 函数嵌套函数 2. 内部函数可以访问外部函数的变量 3 ...

  8. javascript中函数的写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Javascript闭包和C#匿名函数对比分析

    C#中引入匿名函数,多少都是受到Javascript的闭包语法和面向函数编程语言的影响.人们发现,在表达式中直接编写函数代码是一种普遍存在的需求,这种语法将比那种必须在某个特定地方定义函数的方式灵活和 ...

随机推荐

  1. Python操作Redis的5种数据类型

    1.连接redis(两种方式) # decode_responses=True: 解决获取的值类型是bytes字节问题 r = redis.Redis(host=', db=0, decode_res ...

  2. nexus4/5/6/7/9/10设备谷歌安卓5.1.1系统底包下载

    https://developers.google.com/android/nexus/images http://www.inexus.co/thread-18488-1-1.html

  3. 读《MacTalk&#183;人生元编程》及Mac经常使用软件

    引子 池建强的Blog:http://www.cnblogs.com/chijianqiang/ 用了1年多的黑苹果,是用Windows的思维用UI.用Linux的思维用Shell,折腾的是联想E49 ...

  4. [Angular 2] @ViewChild to access Child component's method

    When you want to access child component's method, you can use @ViewChild in the parent: Parent Compo ...

  5. Qt Creator实现状态栏显示

    在程序主窗口Mainwindow中,有菜单栏,工具栏,中心部件和状态栏.前面几个已经讲过了,这次讲解状态栏的使用. 程序中有哪些不明白的类或函数,请自己查看帮助. 1.我们在mainwindow.h中 ...

  6. struts2讲义----二

    Struts的namespace 示例工程Struts2_0200_Namespace Struts.xml <struts> <constant name="struts ...

  7. VCS仿真查看coverage

    VCS仿真查看coverage Design compiler & simulate #!/bin/csh -f setenv NOVAS_HOME /EDASynopsys/verdi3-I ...

  8. 解决SQL Server 占用80端口

    停用掉下面的服务就可以了:

  9. github 预览html

    在网址前加 http://htmlpreview.github.io/?

  10. 如何改写WebApi部分默认规则

    为什么要改 最近公司在推广SOA框架,第一次正经接触这种技术(之前也有但还是忽略掉吧),感觉挺好,就想自己也折腾一下,实现一个简单的SOA框架 用过mvc进行开发,印象之中WebApi和Mvc好像是一 ...