闭包是一种函数,它可以访问其声明范围内的变量。普通函数则只能访问其声明范围内的变量以及其参数。这是闭包和普通函数之间的主要区别。
一个简单的闭包例子如下:
function outerFunction() {
var outerVariable = 10;
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
var closure = outerFunction();
closure(); // 输出 10
在这个例子中,innerFunction
是一个闭包,因为它可以访问它的外部函数 outerFunction
的变量 outerVariable
。
另一方面,下面是一个普通函数的例子:
function normalFunction() {
var normalVariable = 10;
console.log(normalVariable);
}
normalFunction(); // 输出 10
console.log(normalVariable); // 抛出错误,因为 normalVariable 不在当前范围内
在这个例子中,normalFunction
是一个普通函数,它只能访问它自己的变量 normalVariable
。因此,尝试在函数外部访问 normalVariable
将导致错误。
总之,闭包和普通函数的主要区别在于是否可以访问它们声明范围之外的变量。