码迷,mamicode.com
首页 > 其他好文 > 详细

今天是2019年的8月17日

时间:2019-08-17 16:24:44      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:结果   声明   实参   不能   数字   document   变量   nts   get   

JavaScript是一门弱类型,单线程,解释性的语言

  在JS的代码执行前,首先得进行预编译

 1.函数在执行的前一刻,会生成一个Active Object对象

 2.分析函数中的var声明,变量名作为AO对象的属性名,值为undefined, 如果遇到参数同名的话

    不会做任何的改变

 3.分析函数声明,函数名作为AO对象的属性名,值为函数体,如果遇到同名,则 直接覆盖之前的函数

 4.函数的形参作为AO对象的属性名,实参作为AO对象的属性值

关于闭包的一串代码 

<body>
  <ul>
    <li>0</li>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
  </ul>
<script>
  var lis = document.getElementsByTagName(‘li‘);
    for(var i = 0 ; i < lis.length; i ++){
      lis[i].onclick = function () {
      console.log(i);
      }
    }
</script>
</body>

此时的点击事件并不能按我们预想的那样,点击什么数字在控制台显示什么数字,而是无论点击谁都是显示10

  这是因为在预编译过后点击函数所获得值是for循环结束之后的最后结果,经过i++后便是数字10

  我们此时为了达到预期的效果,就需要用到闭包,将for循环与点击事件绑定

  var lis = document.getElementsByTagName(‘li‘);
  for(var i = 0 ; i < lis.length; i ++){
    (function(i){
      lis[i].onclick = function () {
      console.log(i);
      }
    })(i)
  }

这是将for循环的每一个值通过function()传递到点击事件,使点击事件能够获取到每一次点击的位置

也是一个简单的闭包

今天是2019年的8月17日

标签:结果   声明   实参   不能   数字   document   变量   nts   get   

原文地址:https://www.cnblogs.com/jiapei/p/11369034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!