js闭包的理解以及闭包中this的理解
2016-07-27 16:59
453 查看
javascript 闭包、this
2016-01-25 js pl闭包其实很好理解,但是由于经常把this和闭包绑在一起,从而加大了理解的难度,如果将他们分开考虑,那就清晰多了。
闭包
闭包并不是js首创,在许多语言中都支持闭包,如schemer、ruby等。如果没有闭包,像js这样的支持高阶函数特性的语言将是一个噩梦。静态作用域
动态作用域
var name = "xiaofu"; var person = function(lastname){ var name = 'yang'; function personName(){ return name + lastname; } return personName; } var pName = person(); pName("xiaoming"); |
如果是静态作用域则调用的是person里面的 name, 如果是动态作用域则调用的是外层的name(“xiaofu”);而不是”yang”。
而闭包就是用来实现静态作用域的一种方式,即通过闭包将函数和它声明时的作用域保存下来,这样在调用的时候取到的就是声明时所在的作用域而不是调用时的作用域。
this
this则与变量有点不同,即this采用的是类似于动态作用域的情况。js里面一切都是对象,所以函数也都是某个对象的方法,如果没有显示指定则是全局对象。var person = { fullname: function{ console.log(this); }, printAge: function(){ console.log(this); } } person.fullname(); //this指向person var age = person.printAge; age(); //this指向window(浏览器中) |
箭头函数(es6)
es6中新增了箭头函数,箭头函数与通过function声明的函数不同,它的this是使用的声明时上下文中的this.并且不可通过apply, call等改变。
相关文章推荐
- JavaScript基础——事件流
- JSP内置对象pageContext
- JSTL标签c:if和c:chose--个人笔记
- JQ滚屏插件--fullPage.js
- jsp显示本地图片---用户上传显示预览
- JS奇技淫巧
- JavaScript--全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)
- 读书笔记:JavaScript编程全解
- js 生成二维码实例
- 关于JS中的方法是否加括号的问题
- jsessionid的简单说明
- 对js 面对对象编程的一些简单的理解
- js事件默认行为
- jsp <%%> <%!%>的区别
- js自定义随机数插件:yiRan
- js 添加删除替换class 类
- 用JS实现关闭当前窗口【兼容谷歌浏览器】
- JSP的out对象
- JavaScript学习
- 浅谈 JavaScript 中定义变量时有无 var 声明的区别