<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. 【顽固BUG】Visual Studio 2013 + TestDriven.NET-3.8.2860_Personal_Beta 调用的目标发生了异常。

    前言 突然怎么弄也无法断点调试了 输出如下: ------ Test started: Assembly: Server5.V2.dll ------ 调用的目标发生了异常. 而且网站运行提示: -- ...

  2. js控制select数据绑定下拉列表

    JS代码段:  <script type="text/javascript"> $(document).ready(function () { $("sele ...

  3. -bash: mysql: command not found 解决办法 (转)

    root@DB-02 ~]# mysql -u root-bash: mysql: command not found 原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下 ...

  4. mysql 建立加密连接

    加密连接可提高数据的安全性,但会降低性能.要进行加密连接,必须满足以下要求: user权限表里要有相关的SSL数据列.如果安装的MySQL服务器是4.0.0版的,user权限表已包含相关的SSL数据列 ...

  5. 惠普 hpacucli工具使用

    命令组成 hpacucli [parameter=value] 查看: 查看所有控制器状态  hpacucli ctrl all show 查看slot 0阵列信息详细状态 (可以查看物理磁盘和逻辑磁 ...

  6. 【iOS开发之静态库、动态库】

    什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库.github中共享一般是开源库:闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一 ...

  7. 关于动态SQL中的NULL

    declare v_sql ); v_c1 number; v_c2 number; begin v_c2 :; v_sql := 'begin '; v_sql := v_sql||'update ...

  8. Asp.Net--下载文件

    实现方式1: protected void DownLoad_Click(object sender, EventArgs e) { //获取要下载的文件 string filename = Serv ...

  9. C++,关于类和结构体中,成员访问属性(public,private)

    今天发现一个的问题: #include <vector> #include <iostream> #include <algorithm> #include < ...

  10. uva 10038 - Jolly Jumpers

    #include <iostream> #include <cstdio> #include <stdlib.h> using namespace std; ], ...