闭包

来源:互联网 发布:手机触摸屏校准软件 编辑:程序博客网 时间:2024/05/18 17:56

1、

function f1(){  var n=999;  nAdd=function(){n+=1;console.log(n)}function f2(){alert(n); }return f2;}var result=f1();result(); //999nAdd();//1000(这里函数作用域中的n时来自发f1函数下的变量n)result(); //1000

2、

var name = 'global';var obj = {name : 'obj',dose : function(){this.name = 'dose';return function(){return this.name;}}}//这里的this是window,也就是让当前函数指向windowobj.dose().call(this)//obj.dose()调用相当于return后面的返回值,即function(){return this.name;}//obj.dose().call(this)相当于执行一个匿名函数,并且把当前this作用域window传给那个函数,并调用函数执行alert(obj.dose().call(this))//global(因为this改变了函数体指向,让其作用域是window



3、

function createFunctions(){var result = new Array();for (var i=0; i < 10; i++){result[i] = function(){return i;};} return result;}


4、

var result = new Array(), i;result[0] = function(){ return i; }; //没执行函数,函数内部不变,不能将函数内的i替换!result[1] = function(){ return i; }; //没执行函数,函数内部不变,不能将函数内的i替换!...result[9] = function(){ return i; }; //没执行函数,函数内部不变,不能将函数内的i替换!i = 10;funcs = result;result = null; console.log(i); // funcs[0]()就是执行 return i 语句,就是返回10console.log(i); // funcs[1]()就是执行 return i 语句,就是返回10...console.log(i); // funcs[9]()就是执行 return i 语句,就是返回10


原创粉丝点击