Javascript 在函数中运行函数

Javascript 在函数中运行函数,javascript,jquery,function,Javascript,Jquery,Function,我有这个: function cool(){ function alsocool(){ } } 然后我按一下“酷”按钮: $(selector).on('click', function(){ cool(); } 如何在同一次点击中运行cool和Alsocol?请注意,我不想做: function cool(){ function alsocool(){ } alsocool(); } 如果我这样做: $(selector).on('click', fu

我有这个:

function cool(){
   function alsocool(){

   }
}
然后我按一下“酷”按钮:

$(selector).on('click', function(){
 cool();
}
如何在同一次点击中运行cool和Alsocol?请注意,我不想做:

function cool(){
   function alsocool(){

   }
   alsocool();
}
如果我这样做:

$(selector).on('click', function(){
     cool(); alsocool();
    }
它不起作用

是否可以在同一调用中在函数内部运行函数

编辑:

我确实想通过冷却,因为显然,一旦其内部功能冷却但冷却,Alsocol就不会被识别;从多个选择器传递,因此我想知道从哪个选择器传递,并采取适当的操作

例如,我想要这样的东西:

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.
    }
答案很简单:这是不可能的。 内部函数是包含函数作用域的局部函数,因此除非该函数调用它,否则根本无法调用它

如果您想从外部访问这两个功能,请定义alsocool outside cool,即与cool处于同一级别

根据您的评论,以下是一种使用参数确定是否应调用内部函数的方法:

function cool(callInner){
    function alsocool(){

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

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

因此,只能从cool中调用函数alsocool

当然,您可以将Alsocol的声明移到cool之外,这仍然允许您从cool内部调用Alsocol,但您将失去从Alsocol内部访问cool范围的权限

如果这对您来说是一个可行的选项,您还可以根据传递的参数限制在cool内部调用alsocool

function cool(alsoAlsoCool){
   function alsocool(){

   }

   if (alsoAlsoCool) {
       alsocool();
   }
}

// cool(true) will call it, but cool() or cool(false) won't.
如果你这样做

function cool() {
   function alsocool() { ... }
}
那么“alsocool”仅在cool函数执行时存在。它将无法从外部访问

你会想要:

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

$(selector).click(function() {
   cool();
   alsocool();
}):
你不能那样做。Alsocol仅存在于cool内部,单击处理程序不知道Alsocol存在


如果您不想从内部呼叫Alsocol cool,那么您必须使Alsocol全球化。

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

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

    alert("cool");
}

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

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

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

    alsoCool();
});
现场演示:

或者,正如火箭所建议的,您可以这样做:

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

    alert("cool");
}

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

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

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

    alsoCool();
});

您能解释一下为什么不想执行您描述的嵌套定义/调用吗?这是显而易见的解决方案,所以如果你解释为什么它不适合你,它将帮助其他人创造更好的答案。你能详细说明吗?需要嵌套函数的条件是什么?Alsocol是cool中的一个局部函数,不能在其外部调用。要么把Alsocol搬出去,要么把它叫进去。这些是我看到的你唯一的选择。您是否有一个链接或完整的示例来说明您的限制?抱歉,不清楚。我已经编辑了我的问题。真的吗?有没有什么简单的方法来传递一个变量,比如:coolabc;然后在函数内部很酷,如果abc通过了,做alsocool?当然有可能,但是你明确地说你不想在函数内部调用它!正是我想要的。抱歉说不清楚。我已经编辑好了我的问题。是不是考虑这么慢呢?我明白了,所以我先冷静下来,然后通过As酷。例如:如果单击selector1,则先传递cool,然后传递alsocool。如果单击Selector 2,是否仅传递cool?“这不可能吗?”乔纳森:你可以冷静地返回阿尔索科尔,然后根据需要呼叫它。您还可以将元素传递给cool,让它决定是否调用alsocool。抱歉,不清楚。我已经编辑了我的问题。小偷的回答我想这就是我要找的。谢谢。我建议返回一个函数,而不是使用参数。callee。我想这不是Rocket建议的。见小偷的回答谢谢。这就是我要找的@小偷长回答得更快,因此我将接受他的回答。谢谢你的回答,很抱歉我一开始不清楚