在函数内运行函数

时间:2012-01-13 16:12:18

标签: javascript jquery function

我有这个:

function cool(){
   function alsocool(){

   }
}

我按下按钮点击酷()

$(selector).on('click', function(){
 cool();
}

如何从同一次点击中运行cool()alsocool()请注意,我想要这样做:< / p>

function cool(){
   function alsocool(){

   }
   alsocool();
}

如果我这样做:

$(selector).on('click', function(){
     cool(); alsocool();
    }

它不起作用。

是否可以在同一个呼叫中的函数内运行函数?

编辑:

我想要传递cool(),因为很明显alsocool()内部函数cool()但是cool();从许多选择器传递后才会被识别因此,我想知道从哪个选择器传递并采取适当的行动。

示例我想要这样的东西:

function cool(){

// If this was called by button1, run alsocool() else bypass it
       function alsocool(){

       }
// some code goes here

}

$("#button1").on('click', function(){
         cool(); alsocool();
         // If button1 clicked, run cool AND alsocool
        }
$("#button2").on('click', function(){
         cool(); // If button2 clicked, run cool ONLY.
    }

5 个答案:

答案 0 :(得分:2)

答案很简单:这是不可能的。
内部函数是包含函数范围的本地函数,因此除非该函数调用它,否则根本不能调用它。

如果您希望从外部访问这两个功能,请在alsocool之外定义cool,即与cool处于同一级别。


根据你的评论,这里有一种方法可以使用参数来确定是否应该调用内部函数:

function cool(callInner){
    function alsocool(){

    }
    if(callInner) {
        alsocool();
    }
}

答案 1 :(得分:2)

如果你这样做

function cool() {
   function alsocool() { ... }
}

然后'alsocool'仅在执行cool()函数时存在。它无法从外部访问。

你想要:

function cool() { ... }
function alsocool() { ... }

$(selector).click(function() {
   cool();
   alsocool();
}):

答案 2 :(得分:1)

问题在于,因为您已在 alsocool中定义了函数cool ,所以它的可见性仅限于该范围。

因此,您只能 alsocool内调用cool函数。

当然,您可以将alsocool的声明移到cool之外,允许您从{{1}内拨打alsocool 1}},但cool无法访问cool的范围。

如果这是一个可行的选项,您还可以根据传递的参数限制alsocoolalsocool内的调用;

cool

答案 3 :(得分:1)

你不能这样做。 alsocool仅存在于cool内,点击处理程序无法alsocool存在。

如果您不想从alsocool内拨打cool,那么您必须让alsocool全球化。

答案 4 :(得分:1)

我不明白你为什么要这样做,但你可以这样做:

function cool()
{
    arguments.callee.alsoCool = function() {
        alert("also cool");
    };

    alert("cool");
}

$("#b").click(function() {
    cool();
    cool.alsoCool();
});

现场演示:http://jsfiddle.net/ENqsZ/

或者,正如Rocket建议的那样,你可以这样做:

function cool()
{
    alert("cool");

    return function() {
        alert("also cool");
    };
}

$("#b").click(function() {
    var alsoCool = cool();

    alsoCool();
});