2015-05-29 72 views
1
var scaleJssor = new Array(); 
for(myloop=0; myloop<jssor_slider.length; myloop++) 
{ 
    scaleJssor.push(
     function() { 
      var parentWidth = jssor_slider[myloop].$Elmt.parentNode.clientWidth; 

      if (parentWidth) 
       { 
        //alert("executing ScaleSlider"); 
        jssor_slider[myloop].$SetScaleWidth(Math.max(Math.min(parentWidth-100, 960), 230)); 
       } 
      else 
        window.setTimeout(<here I want to pass this function>, 30); 

       }); 

} 

以上只是一个代码片段,我只是想知道我怎么可以通过setTimeout()函数,其中函数是匿名的内部函数,我知道如果我给我可以轻松传递的函数命名,但我想通过不给任何函数名称的方式。如何调用内它的功能,而其匿名函数

+1

在循环内定义函数不是很好的做法。这意味着函数需要在循环的每次迭代中创建。最好在循环之外定义它,然后在循环中调用它。 – Craicerjack

+1

我个人发现我已经开始回避匿名函数。在查看控制台错误时,只需查看函数名称并在源代码中搜索/跳转即可。匿名函数只是一个触摸*更难调试。 –

+0

@Craicerjack,我需要这个循环,因为我没有定义一个特定的函数,我正在定义一个函数数组。 –

回答

1

虽然这不是一个足够好的代码,因为您在循环中反复定义相同的函数。你应该已经定义了循环外的函数。我只是回答你的setTimeout()函数的问题。 如果您将参数传递给函数,以下方法可能会有好处。

function ScaleJssor(k) { 
      var parentWidth = jssor_slider[k].$Elmt.parentNode.clientWidth; 

      if (parentWidth) 
       { 
        //alert("executing ScaleSlider"); 
        jssor_slider[k].$SetScaleWidth(Math.max(Math.min(parentWidth-100, 960), 230)); 
       } 
      else 
        window.setTimeout(function(){ScaleJssor(k)}, 30); 

       } 

我想如果你在你的例子中使用上面的代码,你不需要使用循环。

+0

这是我查询的完美解决方案。非常感谢。它达到了我的目的,解决了我所有的额外疑问。非常感谢。 –

0

在setTimeout中调用函数。 check this

setTimeout(function(){ alert("Hello"); }, 3000); 

其他

var myVar; 

function myFunction() { 
    myVar = setTimeout(alertFunc, 3000); 
} 

function alertFunc() { 
    alert("Hello!"); 
} 
+0

其实我想调用它内部的相同函数,当函数有一个名字的时候,这当然是可能的,就像在我的例子中我可以写myVar = setTimeout(myFunction,3000)一样。但在我的例子中,它是一个匿名函数。所以我想知道我怎么能得到同样的东西,我怎么能通过setTimeout()函数内的匿名函数。这就是我的问题。 –

+0

好的,'arguments.callee'是我想的一个选项。查看[fiddle](https://jsfiddle.net/gxoxn6cg/7/)。 – AVM

+0

请不要使用'arguments.callee'它的deprecated.check [this](http://stackoverflow.com/questions/12050183/javascript-arguments-callee-what-is-it-for) – AVM

1

可以用下一

someCode(function funcName() { 
    // here you can access to function with funcName 

}); 

这是下一个案例工程

var a = function b() { 
    // here your function can be access with a or b 
    // but 'b' garantee you that you call current function 
    // and 'a' not - cause at code below you can redefine a-value to another one 
    // also you can get function by 'b' outside function - it works only inside 
} 

检查在这里http://jsbin.com/rakupayaxo/1/edit?js,output

+0

好的,谢谢你的回复。所以我在某个时候得到了这个函数的名字来称呼它。是吗 ? –

+0

几乎 - 当你 - 也可以通过'b'功能获得功能 - 它只在里面工作 - 检查这个评论。当你在这样的语法中添加名字 - 这个名字只能在函数内部使用 - 其他代码 - 不能使用它 –

相关问题