<script type="text/javascript">
function t1(){
var age = 30;
function t2(){
alert(age);
}
return t2();
}
// var tmp = t1();
/*在其他语言里 函数局部变量在调用完后 就销毁了
但js里 t2用了age变量 依然能访问
形成了封闭的环境 一句话 函数的作用域在声明时生成的,不是调用时
就是那个变量还存在包括它的值
*/
var age = 99;
// tmp();// 20
/*
var xx = 'winddow';
var obj={xx:123,yy:456,t:function(){alert(this.xx)}};
//obj.t();//123
var dog={xx:'lm dog'};
var tmp=dog.t;
tmp();//window
//tmp母体是window
(dog.t=obj.t)()
|
这是一个表达式 返回的是一个值 不是通过引用调用
而是立即使用 就像之前jQuery的那个
null又被解释成window·
前一个本来就是window·母体
后一个 是null 只是结果一样
*/
/*闭包计数器
多人开发时需要一个全局计数器
解决方法:设立一个全局变量 但污染了全部变量
闭包解决如下 是一个别人污染不到的变量*/
/*function counter(){
var cnt = 0;
var cntf = function(){
return ++cnt;
}
return cntf;
}
// 这里 把函数 赋给了变量 要使用这个函数 变量()要这样,,,
var startcnt = counter();
alert(startcnt());
alert(startcnt());
alert(startcnt());
*/
// 把上面简化一下‘
var cnt = (function(){var cnt = 0;
return function(){return ++cnt;}})();
alert(cnt());
/*
这依然是全局变量 所以为了避免全局污染 有两种方法
1 统一放在一个全局对象上 如 jQuery 的$
2 每人用自己的命名空间 */
/*
$ = {};
$ .cnt= ....
var sonia = {};
sonia.cnt= ....*/
</script>