Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。
<script language="JavaScript"> var n=999; function f1(){ alert(n); } f1(); // 999 </script>
<script language="JavaScript"> function f1(){ var n=999; } alert(n); // error </script>
<script language="JavaScript"> function f1(){ n=999; } f1(); alert(n); // 999 </script>
<script language="JavaScript"> function f1(){ var n=999; function f2(){ alert(n); // 999 } } </script>
<script language="JavaScript"> function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 </script>
<script language="JavaScript"> function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000 </script>
<script language="JavaScript"> var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); </script>
<script language="JavaScript"> var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()()); </script>
理解最后两个例子:
1 函数中的this指的是调用这个函数的owner
2 object.getNameFunc()是返回一个函数,并没有执行函数中的代码
3 增加一个例子0:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return (this.name);
}
};
var name = object.getNameFunc();
alert(name);
4 把例子1变成
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name; //这个this是有上下文的限制的
};
}
};
var tmp = Object.getNameFunc(); //此时没有执行this.name
var name = tmp();//这个时候才执行,这时候的this上下文为全局
alert(name);
//alert(object.getNameFunc()())
5 把例子2变成:
var name = "The Window";
var object = {
name : "My Object",