在参数里直接定义函数,那这个函数到底是个什么?
例如在本章节“JavaScript实现简易计算器”4-4课程里,老师写了如下这个回调函数
function each(array, fn) {
for (var i = 0; i < array.length; i++) {
fn(i, array[i]);
}
}我尝试把下面这段代码改写一下,套用老师写的这个each函数
function abcd(){
for(var j=0; j<len; j++){
btn[j].onclick=function(x){
return function(){
alert(x);
}
}(j);
}
}改写如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>效果测试</title>
<style type="text/css">
body{text-align:center;}
label{width:50px; height:30px; display:inline-block; background:pink;}
</style>
</head>
<body>
<label for="radio1" class="active"></label>
<label for="radio2"></label>
<label for="radio3"></label>
<label for="radio4"></label>
<script type="text/javascript">
var btn=document.getElementsByTagName("label");
function each(array,fn){
for(var i=0; i<array.length; i++){
fn(i,array[i]);
}
}
each(btn,function abc(){
btn[i].onclick=function(){
alert(i);
}
});
console.log(abc); //abc is not defined
</script>
</body>
</html>其实与这个each()函数的本体无关,我主要是想问下在参数里面定义一个函数,例如上代码each(btn,function abc(){ ... });,这个函数abc()是直接在参数里面定义的,它的创建环境不明,它既不是在全局环境中创建的(console.log打印不出来),也不是在each()环境里面创建的(变量 i 取不到),那么它的创建环境到底是什么?
抑或说它是个临时函数,没有创建环境?
39
收起
正在回答
4回答
each(btn,function abc(a,b){
b.onclick=function(){
alert(a);
}
});
你可以看下我修改的,你写的参数用的不对,肯定出不来啊
HTML5与CSS3实现动态网页 2018
- 参与学习 1887 人
- 提交作业 4643 份
- 解答问题 5760 个
有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星