什么封闭是做什么?
假设您有这样简单的代码。
let value = 1
function multiply(){
value = value * 2;
console.log(value)
}
multiply() // output: 2
multiply() // output: 4
multiply() // output: 8
console.log(value) // 8
如果您在这里看到我们的全局范围中有一个变量,一个函数乘以乘以*2并将其分配给值变量并安装它。
现在采取另一个代码
function multiply(){
let value = 1
value = value * 2;
console.log(value)
}
multiply() // output : 2
multiply() // output : 2
console.log(value) // output: ReferenceError: value is not defined
如果您在此处看到我们具有函数范围的变量和一个函数乘以
value*2
并将其分配给值变量并安装它。
让我们讨论这两个代码有什么区别?
现在讨论可变寿命
-
在第一个代码变量中具有终身时间的寿命,请关闭窗口或nevigate另一个页面,因为它在全局范围
中
-
在第二个代码变量中具有寿命UTIT函数执行。完成执行后,它将被破坏所有变量。由于这个原因,当我在第二代码中安装值时,
ReferenceError: value is not defined
我认为,如果您聪明,您已经确定了问题。
在我试图获取更新值时,在第一个代码中,它发生了,因为它在全局范围变量中进行更新,并且我们知道全局范围存在ufiate或关闭窗口,这就是我们得到预期结果的原因。
但是,当我在执行后创建一个函数时,它将删除所有变量和执行步骤,这就是为什么当我尝试获得值时,它将始终获得2。并在全局范围内执行后将其扔掉,以便我们获得更新的值。
让我们来做。
function multiply() {
let value = 1;
function mul() {
value = value * 2;
}
mul();
return value;
}
const mul1 = multiply()
const mul2 = multiply()
console.log(mul1, mul2) //output 2 2
仍然无法解决的问题预期4,但是获得2让我们通过return faluible的返回来解决此问题,让我们返回内部/嵌套函数
function multiply () {
let value = 1;
function mul() {
value = value * 2;
return value
}
return mul
};
const mul = multiply()
console.log(mul()) // 2
console.log(mul()) // 4
console.log(mul()) // 8
因此,最终定义了什么是关闭?
闭合是JavaScript的功能,它允许内部函数访问函数的外部范围。闭合有助于将函数绑定到其外部边界,并在创建函数时自动创建。