我有这个:
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.
}
答案 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
的范围。
如果这是一个可行的选项,您还可以根据传递的参数限制alsocool
在alsocool
内的调用;
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();
});