关于闭包和js事件执行机制

最近碰到了关于闭包的问题,查看资料总结下我眼中的闭包


var price=document.getElementsByTagName('div');

for (var i = 0; i < 6; i++) {

    price[i].onClick=function () {

        console.log(i)

    }

}  // 6 6 6 6 6 6


先了解下js的执行机制,这里涉及了JS中单线程的概念。由于JS是单线程语言,不存在并发执行的任务,所有任务都需要排队,前一个任务结束,才会开始下一个任务。因此,在JS中,任务分为两种,一是同步任务,一是异步任务。而for循环就是同步任务,点击事件函数是异步任务,异步任务会去排队,排到同步任务的后面(大家猜猜如果几个异步任务排队顺序是怎样的),ok !

现在代码其实可以等于


var price=document.getElementsByTagName('div');

for (var i = 0; i < 6; i++) {

price[i].onClick=order();

fnction order(){

    console.log(i)

}


然后了解什么是闭包,我理解的闭包就是在函数这个作业域里引用作用域之外的量,闭包有个特点就是--基于词法作用域的查找规则(当前找不到某个变量,就向上查找,如果最终没有找到,则返回undefined)。

所以,order()中的  i 就成了6,好了,小伙伴们了解了吧

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,130评论 0 2
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 7,372评论 0 7
  • 与闭包有关的概念:变量的作用域和变量的生存周期。下面本篇文章就来给大家介绍一下JS中变量的作用域及闭包,有一定的参...
    浅浅而谈阅读 1,534评论 0 0
  • 关于前端性能优化问题详解 出处:http://segmentfault.com/blogs 前端性能优化指南 AJ...
    bennnnn阅读 5,492评论 2 4
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,350评论 1 10