在参数里直接定义函数,那这个函数到底是个什么?
例如在本章节“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 星