今天是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 程序成功跑通!...