传递特定于函数的变量

时间:2012-11-10 15:25:57

标签: javascript jquery html

假设我有两个看起来像这样的函数:

function main(Index)
{
    doStuff();
}

function doStuff()
{
    if(Index == 1)
    {
        document.write("Hello world!")
    }
}

还有一些HTML:

<input type="button" value="Click me" onclick="main(1)" />

我意识到这是使用特定功能变量等非常愚蠢的方式,但这只是出于好奇。那么是否可以将变量Indexmain函数传递给doStuff函数?

3 个答案:

答案 0 :(得分:1)

  

那么可以将变量Index从main函数传递给doStuff函数吗?

不,不是没有明确地将其作为参数传递给doStuffdoStuff需要接受参数,或者它可以使用arguments集合:

function main(index)
{
    doStuff(index);
}

function doStuff()
{
    var index = arguments[0];

    if(index == 1)
    {
        document.write("Hello world!")
    }
}

答案 1 :(得分:1)

这是唯一的方法:

function doStuff(Index)
{
    if(Index == 1)
    {
        document.write("Hello world!")
    }
}

或使其成为全局变量

答案 2 :(得分:1)

为什么要将该调用转移到DoStuff函数?

不是Main对某个事件做出反应的重点,并且&#34;做事情&#34;?

如果是这种情况,您应该将该功能保留在Main中,如下所示:

function Main(index){
    switch (index){
        case 1:
            DoStuff();
            break;
        case 2:
            DoStuff2();
            break;
        default:
            DoStuff(); //Because, why not?
    {
}

function DoStuff(){
    document.write("Hello, world!");
}

function DoStuff2() {//something else happens here}

您没有使用Main作为对象,因此不需要持久性(据我所知)。只要切掉不必要的电话,你的生活就会变得更简单。但是,如果你真的想要实现这种功能,你可以创建一个简单的闭包。它看起来像这样:

<input type="button" onclick="Main(1);" value="Do Something" />

<script type="text/javascript">
function Main(index) {

    //This function only exists within the scope of Main
    function DoStuff() {

        //But now it has the added benefit of knowing about index
        switch (index) {
        case 1:
            alert("Hello, world!");
            break;
        case 2:
            alert("Not, really. I'm mad.");
            break;
        default:
            alert("Hello, world!");
        }
    }

    //Now Main is going to call it's internal function and...
    DoStuff();
}
</script>

由于您在DoStuff的正文中声明了Main,这意味着DoStuff存在于Main的词汇范围内,并且可以访问其所有成员。闭包真的很强大,但很容易滥用它们。如果你真的需要这种功能,我建议走这条路,但除此之外,KISS(Keep It Simple Sir)。