-
var as=document.querySelectorAll('a'); for(var i=0;i<as.length;i++){ as[i].onclick=function(){ tbody.removeChild(this.parentNode.parentNode); } }
看了这个回答我还是觉得在这里this和as[i]是一样的啊?为什么不能用as【i】;as[i]点击删除报错,this可以执行
var as=document.querySelectorAll('a');
for(var i=0;i<as.length;i++){
as[i].onclick=function(){
tbody.removeChild(this.parentNode.parentNode);
}
}
看了这个回答我还是觉得在这里this和as[i]是一样的啊?为什么不能用as【i】;as[i]点击删除报错,this可以执行
因为在es6之前只有函数作用域跟全局作用域,并没有块级作用域,for循环里面,你是用var定义的i,去给每个a绑定点击事件。循环结束后,i已经被赋值成了as.length,这已经超出了a标签数组的长度了,当然是undefined了。用let定义i或用闭包方式创建一个函数作用域,保存每次循环i的值。
对于this为什么可以,是因为点击事件触发后,this指向触发这个点击事件的a元素,当然是没问题的。