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();
}
}
}
为什么不能通过第二种方法调用?
黄舟2017-04-10 16:54:05
第一种方式你向addLoadEvent传递了一个匿名函数作为参数,然后在addLoadEnent里面进行相应的调用。
第二种方式,当执行addLoadEvent(styleHeaderSiblings("h1", "intro"));的时候,其中styleHeaderSiblings("h1", "intro")就已经是函数调用了,由于styleHeaderSiblings没有显式return,就返回了undefined,即你实际传入到addLoadEvent是undefined。
大家讲道理2017-04-10 16:54:05
第一个addLoadEvent的参数是匿名函数
第二个addLoadEvent的参数是函数执行后的结果(注意:这里的styleHeaderSiblings已经执行,执行后的返回值传给addLoadEvent),没有return的话就等于传入了undefined
等价于
var str = styleHeaderSiblings("h1", "intro");
addLoadEvent(str);
迷茫2017-04-10 16:54:05
addLoadEvent接受的参数是一个函数,而你的第二种方式是将执行结果作为参数,此时styleHeaderSiblings并没有返回任何参数,即addLoadEvent接受的func是undefined