javascript之闭包的理解
2017-09-26 17:55
369 查看
闭包,就是能够访问其他函数内部变量的函数,这是阮前辈说的,具体的可以查看其写的博客:学习javascript闭包,里面已经说的很清楚了。
在这里主要说明的是在阮前辈的博客中留下的问题:
或者上面的函数也可以写成这样:
就形成了闭包,这个函数就能够访问父函数内部的局部变量that,当object.getNameFunc()完毕的时候,此时that就是父函数内部的this,而这里的this就指的是object,所以object.name就是 My Object
在这里主要说明的是在阮前辈的博客中留下的问题:
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()());//the window;首先看object.getNameFunc()执行的结果是返回了一个函数,返回到了外面,这样这一个函数执行的时候,是在外面执行的,因此其调用者是window,如此以来this.name就是window.name所以就是the window;
或者上面的函数也可以写成这样:
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; var func = object.getNameFunc(); alert(func());//the window; //这样一切都明了了。那现在变成这样,结果会是什么呢?
// 如果代码是这样的呢? var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()());结果是My Object,原因跟上面的分析过程差不多,由于object.getNameFunc()执行的时候会返回一个函数function(){return that.name;};再加上是在函数内部定义的,所以
就形成了闭包,这个函数就能够访问父函数内部的局部变量that,当object.getNameFunc()完毕的时候,此时that就是父函数内部的this,而这里的this就指的是object,所以object.name就是 My Object
相关文章推荐
- 深入理解javascript原型和闭包(14)——从【自由变量】到【作用域链】
- 深入理解javascript原型和闭包(12)——简介【作用域】
- 深入理解javascript原型和闭包(4)——隐式原型
- 深入理解javascript原型和闭包系列
- 深入理解javascript原型和闭包(17)——补充:上下文环境和作用域的关系
- 深入浅出理解JavaScript的闭包概念
- 深入理解javascript原型和闭包(1)——一切都是对象
- 关于javascript中闭包的理解
- 深入理解JavaScript - 闭包 (四)常见的一个循环和闭包的错误详解
- 全面理解Javascript闭包和闭包的几种写法及用途
- 深入理解javascript原型和闭包(3)——prototype原型
- JavaScript闭包的理解
- 谈谈我对JavaScript中闭包的理解
- 理解JavaScript 闭包
- 深入浅出理解JavaScript的闭包概念
- 深入理解javaScript的闭包
- 个人理解的javascript作用域链与闭包
- JavaScript 闭包(个人理解)
- 全面理解Javascript闭包和闭包的几种写法及用途
- javascript深入理解js闭包