JavaScript:在另一个函数中评估函数

时间:2012-03-03 20:50:04

标签: javascript function eval

我有一个图像尺寸计算功能,它在执行时返回缩放图像尺寸值。 (注意:从阵列中访问图像列表及其尺寸。)

function setDesiredDimensions() {
                var width = Math.min(imagesOrigWidths[currindex], desiredWidthLimit);
                var height = Math.ceil((width / imagesOrigWidths[currindex]) * imagesOrigHeights[currindex]);

                some more calculation code here...

                return {width:width,height:height};
            }     

var size = setDesiredDimensions(imagesOrigWidths[currindex], imagesOrigHeights[currindex]);

然后我在HTML中有一些按钮:

<a id="button1"></a>
<a id="button2"></a>
<a id="button3"></a>

这些按钮上的各种onclick事件,例如:

$('#button1').click( function() {
     currindex = (currindex+1) % max;

     **I need to evaluate setDesiredDimensions function here **

     $("#imageswap").attr({src: imgSrcBase(imagesGuids[currindex]), width: size.width, height: size.height})
});

按钮调整数组中的当前图像索引,我需要应用维度计算。但是:我不希望在所有按钮单击功能中复制和粘贴相同的setDesiredDimensions函数,而只是访问/评估它作为更干净代码的快捷方式。

我听到了eval();是危险和缓慢的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您在所有事件处理程序都可访问的范围中定义了setDesiredDimensions,则只需调用该函数即可。这就是功能的用途。

我认为你的问题是该函数正在使用全局变量而不是传递给它的参数。在您的示例中,您将imagesOrigWidths[currindex]作为参数传递,但也访问函数内部的imagesOrigWidths[currindex],这是没有意义的。

重新定义它,以便您可以简单地传递它需要的参数,例如

function setDesiredDimensions(orig_width, orig_height, limit) {
    var width = Math.min(orig_width, limit);
    var height = Math.ceil((width / orig_height) * orig_height);

    // some more calculation code here...

    return {width:width,height:height};
}