이 단계를 어떻게 해결 했습니까?
그냥 그렇게 :
setTimeout((function(_deepFunction ,_deepData){
var _deepResultFunction = function _deepResultFunction(){
_deepFunction(_deepData);
};
return _deepResultFunction;
})(fromOuterFunction, fromOuterData ) , 1000 );
setTimeout 함수에 대한 참조를 기다리므로 클로저에서 생성하여 내 데이터를 해석하고 내 데이터의 좋은 인스턴스로 함수를 반환합니다!
이 부분을 향상시킬 수 있습니다.
_deepFunction(_deepData);
// change to something like :
_deepFunction.apply(contextFromParams , args);
나는 그것을 크롬, 파이어 폭스 및 IE에서 테스트하고 잘 실행합니다. 성능에 대해서는 모르겠지만 작동하려면 필요했습니다.
샘플 테스트 :
myDelay_function = function(fn , params , ctxt , _time){
setTimeout((function(_deepFunction ,_deepData, _deepCtxt){
var _deepResultFunction = function _deepResultFunction(){
//_deepFunction(_deepData);
_deepFunction.call( _deepCtxt , _deepData);
};
return _deepResultFunction;
})(fn , params , ctxt)
, _time)
};
// the function to be used :
myFunc = function(param){ console.log(param + this.name) }
// note that we call this.name
// a context object :
myObjet = {
id : "myId" ,
name : "myName"
}
// setting a parmeter
myParamter = "I am the outer parameter : ";
//and now let's make the call :
myDelay_function(myFunc , myParamter , myObjet , 1000)
// this will produce this result on the console line :
// I am the outer parameter : myName
어쩌면 서명을 더 잘 준수하도록 변경할 수 있습니다.
myNass_setTimeOut = function (fn , _time , params , ctxt ){
return setTimeout((function(_deepFunction ,_deepData, _deepCtxt){
var _deepResultFunction = function _deepResultFunction(){
//_deepFunction(_deepData);
_deepFunction.apply( _deepCtxt , _deepData);
};
return _deepResultFunction;
})(fn , params , ctxt)
, _time)
};
// and try again :
for(var i=0; i<10; i++){
myNass_setTimeOut(console.log ,1000 , [i] , console)
}
그리고 마지막 질문에 대한 답을 얻으십시오.
myNass_setTimeOut( postinsql, 4000, topicId );
그것이 도움이되기를 바랍니다!
추신 : 죄송하지만 영어 그것은 내 모국어가 아닙니다!