在参数里直接定义函数,那这个函数到底是个什么?
例如在本章节“JavaScript实现简易计算器”4-4课程里,老师写了如下这个回调函数
1 2 3 4 5 | function each(array, fn) { for (var i = 0; i < array.length; i++) { fn(i, array[i]); } } |
我尝试把下面这段代码改写一下,套用老师写的这个each函数
1 2 3 4 5 6 7 8 9 | function abcd(){ for(var j=0; j<len; j++){ btn[j].onclick=function(x){ return function(){ alert(x); } }(j); } } |
改写如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <!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积分~
来为老师/同学的回答评分吧