search

Home  >  Q&A  >  body text

javascript函数调用

function styleHeaderSiblings(tag, theclass) {
    if (!document.getElementsByTagName) return false;
    var headers = document.getElementsByTagName(tag);
    var elem;
    for (var i = 0; i < headers.length; i++) {
        elem = getNextElement(headers[i].nextSibling);
        addClass(elem, theclass);
    }
}
addLoadEvent(function () {//1种
    styleHeaderSiblings("h1", "intro");
});

addLoadEvent(styleHeaderSiblings("h1", "intro"));//2种

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function () {
            oldonload();
            func();
        }
    }
}

为什么不能通过第二种方法调用?

PHP中文网PHP中文网2837 days ago424

reply all(3)I'll reply

  • 黄舟

    黄舟2017-04-10 16:54:05

    第一种方式你向addLoadEvent传递了一个匿名函数作为参数,然后在addLoadEnent里面进行相应的调用。

    第二种方式,当执行addLoadEvent(styleHeaderSiblings("h1", "intro"));的时候,其中styleHeaderSiblings("h1", "intro")就已经是函数调用了,由于styleHeaderSiblings没有显式return,就返回了undefined,即你实际传入到addLoadEvent是undefined。

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 16:54:05

    第一个addLoadEvent的参数是匿名函数
    第二个addLoadEvent的参数是函数执行后的结果(注意:这里的styleHeaderSiblings已经执行,执行后的返回值传给addLoadEvent),没有return的话就等于传入了undefined
    等价于

    var str = styleHeaderSiblings("h1", "intro");
    addLoadEvent(str);
    

    reply
    0
  • 迷茫

    迷茫2017-04-10 16:54:05

    addLoadEvent接受的参数是一个函数,而你的第二种方式是将执行结果作为参数,此时styleHeaderSiblings并没有返回任何参数,即addLoadEvent接受的func是undefined

    reply
    0
  • Cancelreply