第一天
下面的代码的输出结果是什么,并分析原因。
var func = function course(){
course = 1;
console.log(course);
console.log(typeof course);
}
func();
console.log(course);
console.log(typeof course);
结果:
分析:var func = function course() 具名函数表达式,函数名称可以在函数内部被访问(类似于立即执行函数(立即执行函数同样在内部有名称)),但是无法被修改,course = 1并没有生效,在函数外部是无法被访问的,所以就会报错,但是typeof是不会报错的,因为typeof在搞一个未声明的变量时会显示undefined,所以最后的结果是function undefined。
阅读下面的代码,说出每次点击li标签的时候输出的结果是什么?
<ul id="test">
<li>第1个li元素</li>
<li>第2个li元素</li>
<li>第3个li元素</li>
</ul>
var eles = document
.getElementById('test')
.getElementsByTagName('li');
for(var i = 0;i<eles.length;i++){
eles[i].onclick = function (){
alert(i)
}
}
结果:
无论是点击哪一个标签,弹出框的显示内容都是3.
分析:先分析第一行代码,else是一个ul之中的li数组,长度为3,所以在for循环结束之后的i的值是3,alert的时候是alert最终在全局的i的值为3,所以无论点击哪一个标签的时候都是3,。如果想要随着i的变化而变化,那么就要产生闭包,让它立即执行,在立即执行函数之中传入i的值。下面是具体的代码以及结果:
var eles = document
.getElementById('test')
.getElementsByTagName('li');
for(var i = 0;i<eles.length;i++){
(function (i){
eles[i].onclick = function (){
alert(i)
}
})(i)
}
结果: