在全局范围内声明的函数是一个闭包吗?

时间:2017-08-05 00:53:31

标签: javascript closures

我正在准备作为JS开发人员进行面试,我碰到了这个闭包定义:

  

闭包是在另一个函数(称为父函数)中定义的函数,并且可以访问在父函数作用域中声明和定义的变量。 / p>

让我们考虑两个不同的代码:

function a() {
    const temp = 1;

    function b() { 
        console.log(temp); 
    }        
}  

因此,函数b显然是一个闭包,因为它是在函数a中声明的,并且可以访问其变量temp

但是,如果我在没有IIFE的情况下声明一个函数,那该怎么办呢?

function c() {
    alert("Hi") // a function taken from the global scope
}

我的c函数未在任何函数内声明,但它可以访问全局范围。它可以被称为闭包,还是应该在另一个被调用的函数中明确声明?

1 个答案:

答案 0 :(得分:3)

  

可以称为闭包

是的,虽然我会说它会创建一个闭包(对于外部执行上下文中的变量)而不是“是”闭包。

  

或者应该在另一个被称为一个

的函数中明确声明

没有

重复How do JavaScript closures work?