javascript常见闭包面试题
2015-07-10 11:32
645 查看
闭包的定义
闭包就是能够读取其他函数内部变量的函数
什么时候使用闭包
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
先看看一般的调用方法:
然后改用闭包:
这里给大家普及一下this的相关问题
在全局函数中this等于window
当函数被当做某个对象的方法调用时,this等于那个对象
匿名函数的执行环境具有全局性,this通常指向window
那么如何访问“local呢”?
闭包变量常驻内存
由于闭包访问外部函数的i,外部函数返回引用闭包函数,所以内存不会被回收,i值也常驻内存,所以每次执行say函数时,i并不会重新复制
闭包就是能够读取其他函数内部变量的函数
什么时候使用闭包
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
先看看一般的调用方法:
var flag = "window"; var object = { flag : "local", sayFlag: function(){ alert(this.flag); } } object.sayFlag();//local
然后改用闭包:
var flag = "window"; var object = { flag : "local", sayFlag: function(){ //返回一个匿名函数 return function(){ alert(this.flag); } } } object.sayFlag()();//window
这里给大家普及一下this的相关问题
在全局函数中this等于window
当函数被当做某个对象的方法调用时,this等于那个对象
匿名函数的执行环境具有全局性,this通常指向window
那么如何访问“local呢”?
var flag = "window"; var object = { flag : "local", sayFlag: function(){ var that = this; //此处的this是object的引用 //返回一个匿名函数 return function(){ alert(that.flag); } } } object.sayFlag()();//local
闭包变量常驻内存
var say = function(){ var i = 1; var sayName = function(){ i++; alert(i); } return sayName; } var result1 = say(); result1(); //1 result1(); //2
由于闭包访问外部函数的i,外部函数返回引用闭包函数,所以内存不会被回收,i值也常驻内存,所以每次执行say函数时,i并不会重新复制
相关文章推荐
- ajax调用后台webservice返回JSON字符
- javascript实现确定和取消提示框效果
- javascript实现的简单的表单验证
- extjs 排序
- js中if条件判断
- JS实现 分享视频中-->点击button(copy),复制对应网址
- 数据可视化 d3js学习之简单的饼图
- 深入了解jsonp解决跨域访问
- js 中json字符串转化json对象
- FastJson的使用
- 原生js 异步请求,responseXML解析
- 移动设备、手机浏览器Javascript滑动事件代码
- JSP内置对象与servlet对应关系
- 不要使用SBJSON(json-framework)
- js 网页各种定位
- JavaScript数据类型转换
- JSVM代码阅读笔记
- JavaScript中的execCommand()命令详解及实例展示
- JSVM中配置文件介绍以及如何配出各种可分级
- JSP自定义标签开发入门