猿问

关于addLoadEvent函数的一点小疑问

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、为什么要特地弄个匿名函数出来。必要性在哪里?


慕尼黑5688855
浏览 379回答 1
1回答

智慧大石

写法一:addLoadEvent(styleHeaderSibling("h1", "intro"))你这么写,运行的时候,styleHeaderSibling("h1", "intro")函数在这就被调用了。写法二:addLoadEvent(function(){styleHeaderSibling("h1", "intro");});是交给addLoadEvent方法里面的callback执行函数执行通俗说应该就是,第一个写法执行完styleHeaderSibling再执行addLoadEvent第二个写法是先执行addLoadEvent,函数体内部再执行styleHeaderSibling论必要性,其实是看你编程时的逻辑了,各有场合第二种写法是回调函数,传入的函数可以在主函数执行的时候随时触发,第一种写法相当于把传的函数执行完的再执行主函数
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答