前端笔试题阿里篇之二--如何避免闭包,以及解决闭包问题

   总共遇到了两个有关闭包的问题。

  1.以下代码的运行结果是什么,如果希望看到控制台每隔一秒连续输出1-9,应该如何修改代码

for(var i=1;i<10;i++){

setTimeout(function(){

console.log(i);

},1000);

}

    由于在setTimeout函数里面的匿名函数内引用了外部的变量i,造成了闭包问题。控制台会连续打印9个是10.所以解决该问题的要点就是解决闭包问题。解决闭包的方法,可以采用匿名函数。模仿块级作用域的方法。

  我自己写的方法如下(当时小手一抖,我就把num*1000写成了1000):

for (var i = 1; i < 10; i++) {
(function(num){
setTimeout(function(){
console.log(num);
},num*1000);
})(i);

}

2

function addEventOnclick(){
var as=document.getElementsByTagName('a');
for(key in as){
var text=as[key].innerHTML;
as[key].οnclick=(function(t){//使用匿名函数解决闭包问题
return function(){
alert(t);
};
})(text);
}
}
addEventOnclick();

你可能感兴趣的:(前端面试笔试资料整理)