1

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

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函数?

4

3 回答 3

1

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

不,不是没有明确地将其作为参数传递给doStuff. 要么doStuff需要接受一个参数,要么它可以利用arguments集合:

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

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

    if(index == 1)
    {
        document.write("Hello world!")
    }
}
于 2012-11-10T15:27:30.183 回答
1

这是唯一的方法:

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

或使其成为全局变量

于 2012-11-10T15:27:31.953 回答
1

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

Main对事件做出反应并“做事”不是重点吗?

如果是这种情况,您应该将该功能保留在 中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(保持简单先生)。

于 2012-11-10T16:35:13.340 回答