问答详情
源自:3-4 domReady的实现

调用init函数不理解

只执行一次用户的回调函数init()这一点不理解,

如下是老师的代码:

var init=function(){

   if(!done){

    done=true;

fn();

   }

 };

如果我把老师的代码改为如下:

var init=fn();

好像也不可能会出现fn()函数调用两次的情况对吗?会的朋友指教一下(求详细一点)谢谢谢谢


提问者:海贼王2015 2015-09-22 16:27

个回答

  • joker_0042
    2015-10-19 17:38:07

    var init = fn();由于回调函数fn没有返回值,那么init存储的值为undefined;我想你的本意是想将init指向fn所指向的函数对象,然后在后面直接调用init(),对吧?如果是这样,那么对于onreadystatechange事件的处理程序和其前面()()结构中的语句会造成两次调用回调函数fn,而有了done条件判断,只要init调用一次,再次调用init就会失效,从而保证只调用一次回调函数fn。

  • felix
    2015-09-23 09:54:14

    init=fn();
    是把fn的执行的返回值给了init,如果这样,就调用多次fn()了。
    结果成了调用fn()(),仔细看看,是不是这样。