一、变量的作用域
Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。
var n=999;
function f1(){
alert(n);
}
f1(); // 999
另一方面,在函数外部自然无法读取函数内的局部变量。
function f1(){
var n=999;
}
alert(n); // error
这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量
function f1(){
n=999;
}
f1();
alert(n); // 999
二、如何从外部读取局部变量?
闭包就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
四、闭包的用途
最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
function f1(){
var n=999;
nAdd=function(){n++;} //不加var 相当于全局变量
function f2(){
alert(n);
}
return f2;
}
var result = f1(); //这里的f1函数相当于f2函数
result();
nAdd();
result();
冒号的用法
冒号一般有3种语法作用:(1)声明直接量对象的成员和声明标签
(2)switch语句分支
(3)?:三元表达式的false
举个例子:
对象表达法冒号在这里用来分割对象的属性和属性值
getValue = {
a : "value1",
b : "value2"
};
//调用;
alert(getValue.a);
//也可以这么写
alert(getValue["b"]);
如上,a和b是属于getValue对象的2个属性
2, 对象的方法,其实用法跟上面差不多
getValue =
{
getFirst:function()
{
alert("value1");
}
}
//调用
getValue.getFirst();
本文出处(http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html)
浙公网安备 33010602011771号