在此示例中,greet()
函数是通过sample.greet()
调用的。
let sample = {
greet() {
console.log("hi")
}
}
如果这样定义,如何调用内部greet()
函数?
function sample() {
function greet() {
console.log("hi")
}
}
答案 0 :(得分:2)
在函数体中声明的函数,例如您的示例中的greet()
函数:
function sample() {
function greet() {
console.log("hi")
}
}
在函数体内是私有的,不能从sample()
函数范围之外调用。您只能从greet()
函数体内调用sample()
,除非您在运行greet
之后以某种方式分配或返回sample()
,所以您有意将greet
分配给了一些外部变量(在您的示例中不存在)。
函数是对象,因此您可以在这些对象上创建属性,然后可以将函数分配给属性,然后可以对其进行调用:
function sample() {
console.log("running sample()");
}
sample.greet = function () {
console.log("hi")
}
sample.greet();
答案 1 :(得分:0)
您可以通过在封闭函数中调用嵌套函数来调用它。这是因为嵌套函数的范围仅限于封闭函数,并且没有其他方法可以从外部调用它。
function sample() {
function greet() {
console.log("hi");
}
greet();
}
sample()
答案 2 :(得分:0)
您可以为对象分配属性的方式与为对象分配属性的方式相同。您可以将另一个函数分配为这些属性之一,使其像方法一样。
function foo(){
console.log("foo called");
}
foo.bar = function() {
console.log("foo.bar called");
}
foo(); // "foo called"
foo.bar(); // "foo.bar called"
您还可以将任何值分配给函数的属性。
foo.x = 1;
console.log(foo.x); // 1
是的,函数是对象,可以将它们像对象一样对待。