JavaScript变数可以属于本地或全局范围。
私有变量可以成为可能带密封盖 。
全局变量
一个函数可以访问函数中定义的所有变量,就像这样:
但功能还可以访问函数外部定义的变量,就像这样:
在最后一个例子, 一个是全局变量。
在网页中,全局变量属于窗口对象。
全局变量可以在页面中使用(变更)所有脚本(和窗口)。
在第一个例子中, 一个是一个局部变量。
本地变量只能定义它的函数内部使用。 它是由其他功能和其他脚本代码隐藏。
具有相同名称的全局和局部变量是不同的变量。 修饰一个,不修改其他。
无关键字var创建的变量,始终是全球性的,即使他们是一个函数内部创建的。
可变生命
只要全局变量住您的应用程序(你的窗口/网页)生活。
局部变量有短暂的一生。 在调用功能时它们被创建,并且当函数结束删除。
A计数器困境
假设你想使用一个变量计数的东西,并且希望此计数器可用于所有的功能。
你可以使用全局变量和函数来增加计数器:
例
var counter = 0;
function add() {
counter += 1;
}
add();
add();
add();
// the counter is now equal to 3
试一试» 计数器应仅由改变add()函数。
问题是,页面上的任何脚本可以改变计数器,不调用add() 。
如果我宣布在函数内部计数器,任何人都无法改变它不调用Add()方法:
例
function add() {
var counter = 0;
counter += 1;
}
add();
add();
add();
// the counter should now be 3, but it does not work !
试一试» 它不起作用! 我每次调用add()函数,计数器设置为1。
一个JavaScript内部函数可以解决这个问题。
JavaScript的嵌套函数
所有功能都可以访问全局范围。
事实上,在JavaScript中,所有功能可使用“上方”它们的范围。
JavaScript的支持嵌套函数。 嵌套函数可以访问“上面”他们的范围。
在本实施例中,内功能plus()有权访问在父功能计数器变量:
这可能已经解决了这个计数器的困境,如果我们可以达到plus()从外部的功能。
我们还需要找到一种方法来执行计数器= 0只有一次。
我们需要关闭。
JavaScript的闭包
记住自我调用的功能呢? 这是什么功能呢?
例
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// the counter is now 3
试一试» 例子解释:
添加变量被分配了一个自调用函数的返回值。
自调用函数只运行一次。 它将计数器设置为零(0),并返回一个函数表达式。
这种方式加载成为一个功能。 “妙”的是,它可以在父范围内访问计数器。
这被称为一个JavaScript 闭合,这使得有可能为一个函数具有“ 私有 ”的变量。
计数器是由匿名功能的范围的保护,并且只能使用添加功能来改变。
闭包是父范围有功能的访问,家长功能关闭后。