在本教程中,我们将学习javascript的一部分,即了解JavaScript闭包
封闭允许JavaScript程序员编写更好的代码。创意,表现力和简洁。我们经常在JavaScript中使用闭包,无论您有JavaScript的经验如何,无疑都将一次又一次地遇到它们。当然,闭包可能看起来很复杂并且超出了您的范围,但是在您阅读本文之后,闭包将更容易理解,因此对您的日常JavaScript编程任务更具吸引力。
什么是JavaScript闭包?
的JavaScript闭包是指内部函数即使在外部函数范围之外执行时也可以访问外部函数的成员(词法范围)。
因此,我们不能在不考虑功能和范围的情况下谈论闭包。
的JavaScript变量可以属于本地范围或全局范围。
可以使用闭包将全局变量设为局部(私有)。
的JavaScript的范围
范围是指程序中定义的变量的可见性范围。在JavaScript中创建范围的方法有多种,例如 尝试捕获块, 职能 , 让 带有花括号的关键字。我们主要有两个范围的变化: 全球范围 和 当地范围.
-
当地范围
javascript函数可以访问在特定函数内分配的所有变量
例如
function multiply_local() {
var a = 3; // 当地范围
return a * a;
}
-
全球范围
javascript函数也可以访问在函数外部定义的变量。
例如
var a = 8;
function multiply_global() {
return a * a;
}
词汇范围
的JavaScript的 词汇范围 在编译阶段确定。它设置变量的范围,以便仅可以在定义该变量的代码块内调用/引用该变量。
在周围功能块内声明的功能可以访问周围功能的词法范围内的变量。
var AvailableBalance = 1000 // 全球范围
function withdraw (amount) {
var balance = parseInt(AvailableBalance) - parseInt(amount);
const actualBalance = (function () {
const TAX = 15.2
return balance - TAX
/*
* Accesses balance variable from the lexical scope
*/
})() // Immediately Invoked Function expression
// console.log(TAX) // Err: Can't find variable: TAX
return actualBalance
}
alert("Available Balance : " + withdraw(300));
在其封闭函数之外调用内部函数,但仍保持对其封闭函数(词法范围)中变量的访问,会创建一个JavaScript闭包。
function book () {
var name = 'Javascript - closure'; // Local variable
var actions = {
lang: function () {
// new function scope
alert('Selected Book : ' + name); /**
* Accessing the name variable from the outer function scope (lexical scope)
*/
}
} // actions object with a function
return actions; /**
* We return the actions object
* We then can invoke the speak function outside this scope
*/
}
alert(book().lang());
闭包允许公开一个公共接口,同时它隐藏并保留外部范围内的上下文的执行。
一些Javascript设计模式使用了闭包。
获得更多文章– 的JavaScript