函数b在函数a中声明。所以,我试图在功能a之外调用功能b。它没有被调用。
var a = function() {
alert("a");
var b = function() {
alert("b");
}
}
输出:- 函数b称为 带有消息b的警报框
答案 0 :(得分:1)
您需要返回b
并使用它。首先将涉及调用函数a
,但是您将拥有一个可以反复调用以提醒b
的函数:
var a = function() {
alert("a");
var b = function() {
alert("b");
}
return b;
}
var messageB = a();
messageB();
messageB();
答案 1 :(得分:0)
尝试在“ a”函数外部声明“ b”变量:
var b;
var a = function() {
alert("a");
b = function() {
alert("b");
};
};
这样,您可以从b
外部访问a
,因为它是在a
外部声明的。在第一次调用undefined
之前,它将是b
,因此您不能在a
之前调用a
。另外,如果您两次致电b
,则前一个 var b;
var a = function(name) {
b = function() { alert(name); };
};
a("first version");
b(); // first version
a("second version");
b(); // second version
将被覆盖。如下所示:
a
如果您不需要b
中 var a = function() { alert("a"); };
var b = function() { alert("b"); };
内的任何内部变量,则没有理由嵌套这些函数,在这种情况下,您应该只有两个独立的函数:
{{1}}
答案 2 :(得分:0)
首先返回该函数并调用它,
var a = function() {
alert("a");
var b = function() {
alert("b");
}
return b;
}
var b = a();
b();
答案 3 :(得分:0)
如上所述,您可以简单地返回函数b。 Java语言中的函数可以像这样传递,这是垃圾收集语言的一个很好的功能。
但是您可以做得更好,如果您想公开多个功能呢?
您可以返回带有附加方法的对象。
function A() {
let value = 0;
return {
inc: () => ++ value,
dec: () => -- value,
show: () => console.log(value)
}
}
const a1 = A();
a1.inc(); a1.inc(); a1.show();
const b1 = A();
b1.inc(); b1.dec(); b1.dec(); b1.show();
现在,上面的内容看起来与所谓的class
非常相似,但事实并非如此。这样做的一个缺点是,如果您想创建数千个实例,则一个类会更好,因为它可以将其方法放在原型上。但是话说回来,就像使用React Hooks所发现的那样,那还不是那么糟糕。
上述优点之一是,您不必进入this
实例上下文的泥泞世界。
为完整起见,这里是一个类版本。
class A {
value = 0;
inc() { ++ this.value; }
dec() { -- this.value; }
show() { console.log(this.value) }
};
const a1 = new A();
a1.inc(); a1.inc(); a1.show();
const b1 = new A();
b1.inc(); b1.dec(); b1.dec(); b1.show();
也有人说,一个简单的解决方案是使a
和b
都为全局变量,但是越避免使用全局变量越好,所以如果a
和b
有一些共同的意图,使用闭包甚至一个类会更好。
答案 4 :(得分:0)
或者如果您需要对象批准
`var a = function() {
print("a");
this.b = function() {
print("b");
}
return this
}
a().b()`
答案 5 :(得分:0)
所有其他答案都足够好,但是以防万一,您可能喜欢这种directly calling
inner function
without returning
这种方法。
您可以简单地包装内部函数(即b
)作为这样的自调用函数,
var a = function() {
alert("a");
var b = (function() {
alert("b");
})()
}