function styleHeaderSibling(tag, theclass){
if(! document.getElementsByTagName) return false;
var headers = document.getElementsByTagName("h1");
for(var i =0; i<headers.length; i++){
var elem = getNextElement(headers[i].nextSibling);
//elem.style.fontWeight = "bold";
//elem.style.fontSize = "1.2em";
//elem.className ="intro"; //有些已有className会被覆盖掉。所以写出addClass函数。
addClass(elem, "intro");
}
addLoadEvent(function(){
styleHeaderSibling("h1", "intro");
});
这个是dom编程艺术 第九章对函数进行抽象的一点内容,我想问的是能不能直接写addLoadEvent(styleHeaderSibling("h1", "intro"));进行调用。我试了下代码,是可以运行的,这里我有两点疑问:
1、addLoadEvent(func)函数的定义,func是不加括号的,用这个语句addLoadEvent(styleHeaderSibling("h1", "intro"));调用为什么还能正常运行。
2、为什么要特地弄个匿名函数出来。必要性在哪里?
写法一:addLoadEvent(styleHeaderSibling("h1", "intro"))你这么写,运行的时候,styleHeaderSibling("h1", "intro")函数在这就被调用了。
写法二:addLoadEvent(function(){
});
是交给addLoadEvent方法里面的callback执行函数执行
通俗说应该就是,第一个写法执行完styleHeaderSibling再执行addLoadEvent
第二个写法是先执行addLoadEvent,函数体内部再执行styleHeaderSibling
论必要性,其实是看你编程时的逻辑了,各有场合
第二种写法是回调函数,传入的函数可以在主函数执行的时候随时触发,第一种写法相当于把传的函数执行完的再执行主函数