日期:2014-05-16  浏览次数:20355 次

班门弄斧01:Javascript闭包

闭包:兴趣,注意undefined这个数据类型
先看一个例子:
<script type="text/javascript">
var name = "Love Movie";

var object = {
name : "Love Music",
getName : function(){
alert(this.name);
   }
};
alert(object.getName ());
</script>



这个例子会弹出什么东西?
会弹出“Love Music”,"undefined"

打印undefined的原因仔细思考下。

<script type="text/javascript">
var name = "Love Movie";

var object = {
name : "Love Music",
getName : function(){
alert(this.name);
   }
};
var a = object.getName();
 alert(a);
</script>

闭包:局部变量和全局变量的区分

<script type="text/javascript">
var name = "Love Movie";

var object = function() {
var name = "Love Music"; //(A)
};

function init() {
object();
}

init();
alert(name);
</script>
会打印出Love Movie,因为(A)处的name是object对象的局部变量,外部是无法访问的。
如果去除(A)处的var,结果又是如何?Love Music

如果在一个函数中,用var定义变量,那么这个变量将是这个函数的局部变量,并且外部的函数无法调用。
那么如果想要有属于自己函数的变量,一定要在函数中给这个变量增加一个 var,否则将会默认为全局变量。


提问,那么我们如何调用局部变量呢?

<script type="text/javascript">
var name = "Love Movie";

var object = {
name : "Love Music", //(A)
getName : function() {
return this.name;
}
};

alert(object.getName());
</script>