Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从函数外部调用返回的函数_Javascript_Function_Return - Fatal编程技术网

Javascript 从函数外部调用返回的函数

Javascript 从函数外部调用返回的函数,javascript,function,return,Javascript,Function,Return,我正在尝试调用从函数返回的函数。我的意思是: myFunction.something; // (Wrong) function myFunction() { return { something: function() { ... } }; } 当我尝试调用myFunction时,有些事情没有发生。如何调用函数之外的返回函数 var指数=0; var animID=requestAnimationFrame(myFu

我正在尝试调用从
函数
返回的
函数。我的意思是:

myFunction.something; // (Wrong)
function myFunction() {
    return {
        something: function() {
            ...
        }
    };
}
当我尝试调用
myFunction时,有些事情没有发生。如何调用函数之外的返回函数

var指数=0;
var animID=requestAnimationFrame(myFunction.something);
函数myFunction(){
返回{
某物:函数(){
索引++;
控制台日志(索引);
如果(索引===5)取消动画帧(animID);
else animID=requestAnimationFrame(myFunction.something);
}
};
}
试试这个:

myFunction().something()
  • myFunction()
    调用
    myFunction
    函数
  • 我们在返回值(对象)上使用点表示法来查找它的
    something
    成员
  • 该成员也是一个函数,因此添加另一组括号
    ()
    来调用它

写入函数后调用函数

var指数=0;
函数myFunction(){
返回{
某物:函数(){
索引++;
控制台日志(索引);
如果(索引===5)取消动画帧(animID);
else animID=requestAnimationFrame(myFunction().something);
}
};
}

var animID=requestAnimationFrame(myFunction().something)
myfunction
不是调用
myfunction()
得到的对象,它是函数本身,没有
。something
方法

您可以再次调用它(如
myfunction().something()
),但更好的方法是存储对已创建对象的引用:

function myFunction() {
  var index = 0;
  var o = {
    something: function() {
      index++;
      console.log(index);
      if (index < 5) requestAnimationFrame(o.something);
      // btw you don't need to cancel anything once you reach 5, it's enough to continue not
    }
  };
  return o;
}

myFunction().something();
函数myFunction(){
var指数=0;
变量o={
某物:函数(){
索引++;
控制台日志(索引);
如果(索引<5)请求animationframe(o.something);
//顺便说一句,你不需要取消任何东西,一旦你达到5,这足以继续不
}
};
返回o;
}
myFunction().something();

或者,您可能希望完全放弃函数,或者使用模块模式(使用IIFE),因为您似乎像使用单例一样使用它。

我首先建议使用描述性变量名<例如,code>utils
而不是
myFunction
,以及
incrementFrame
而不是
something
。其次,我建议重新考虑您的代码组织方法,简单地将所有助手函数直接放在一个对象中,然后引用该对象:

var指数=0;
var animID=requestAnimationFrame(utils.incrementFrame);
变量utils={
incrementFrame:函数(){
索引++;
控制台日志(索引);
如果(索引===5)取消动画帧(animID);
else animID=requestAnimationFrame(utils.incrementFrame);
}

}
尝试实际调用
myFunction
<代码>requestAnimationFrame(myFunction().something)@Hamms,行得通!继续调用
myFunction()
是不好的,还是我应该让一个变量引用
myFunction()
,然后调用该变量?在本例中,它看起来很糟糕,是的,但我假设您将函数隐藏在返回值中是有原因的。在不知道您想要实现什么的情况下,很难就如何最好地实现它提供建议。@Hamms我正在尝试组织代码,所以我返回了函数中的所有helper函数。这样我就可以像这样调用helper函数:
helperFunction.helper1
。我试图“复制”这个答案中使用的方法:我首先建议使用描述性变量名<例如,code>utils
而不是
myFunction
,以及
incrementFrame
而不是
something
。其次,我建议忽略这个答案,只需将所有助手函数直接放在一个对象中,然后引用该对象。谢谢!但是对于命名函数,调用它的位置没有什么区别。您可以在页面底部定义它,并在之前调用它。