今天是2019年的8月17日

Posted jiapei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天是2019年的8月17日相关的知识,希望对你有一定的参考价值。

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日的主要内容,如果未能解决你的问题,请参考以下文章

历史上的今天8 月 17 日:Oracle 创始人出生;第一个 COBOL 程序成功跑通!

历史上的今天8 月 17 日:Oracle 创始人出生;第一个 COBOL 程序成功跑通!...

在Android中动态获取过去1年的月份列表

历史上的今天10 月 17 日:微软发布 Windows 8.1;IMDb 成立;海盗湾创始人诞生

历史上的今天8 月 20 日:两位传奇程序员的诞生日!

历史上的今天8 月 20 日:两位传奇程序员的诞生日!