正在学习javascript闭包机制,有以下两段代码:<script type="text/javascript">
var n = 2011;
var f1={
n:999,
f2:function (){
var that = this;
return function(){
return that.n;
};
}
}; alert(f1.f2()()); //999</script>
<script type="text/javascript">
var n = 2011;
function f1(){
var n=999;
var that = this;
function f2(){
return that.n;
}
return f2;
} var result = f1();
alert(result()); //2011</script>
请问第二段代码为什么引用的是全局的n而第一段代码引用的是f1的成员变量n?这个问题是否和object对象与function对象特点有关,请指教!谢谢!
var n = 2011;
var f1={
n:999,
f2:function (){
var that = this;
return function(){
return that.n;
};
}
}; alert(f1.f2()()); //999</script>
<script type="text/javascript">
var n = 2011;
function f1(){
var n=999;
var that = this;
function f2(){
return that.n;
}
return f2;
} var result = f1();
alert(result()); //2011</script>
请问第二段代码为什么引用的是全局的n而第一段代码引用的是f1的成员变量n?这个问题是否和object对象与function对象特点有关,请指教!谢谢!
解决方案 »
- 自己写的一个幻灯片,喜欢的可以看一下。做的不好的地方可以指点
- 求JS入门视频 急急急
- 求教各位大侠如何实现太平洋汽车网的FLASH播放广告,谢谢!
- ExeclWorkSheet.Range("A6:A18").Value = arrData; 为什么不对呀
- 指点一下新手,谢谢了
- 救命呀!请问我要做个当鼠标双击文本框时就可弹出时间选择器,可选着年份和日期。谢谢!
- 迷茫中,请指点
- 请问大家,如何将此VBScript 的函数改为JAVASCRIPT的?
- 怎么样动态生成表格中的行列,并可以实现跨多行或是多列?
- javascript中组成二个数,然后相乘,得到最大值
- jquery创建-移动-消失
- cookie设置path后不稳定
<html>
<title>Ext源码分析</title>
<meta http-equiv="Content-Type" content="text/html" ; charset="utf-8">
<body onload="myEffect()">
<table id="mytab" border="1">
<tr>
<td>第1列</td>
<td>第2列</td>
<td>第3列</td>
<td>第4列</td>
<td>第5列</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
</table>
<div id="console" style="background:#ffff00"></div>
</body>
<script type="text/javascript" src="closure_example.js"></script>
</html>
function myEffect(){
var console=document.getElementById('console');
var tab=document.getElementById('mytab');
var trs=tab.getElementsByTagName('tr');
for(var i=0;i<trs.length;i++){
var tr=trs[i];
tr.onmouseover=function(){
this.style.background="#ff0000";
}
tr.onmouseout=function(){
this.style.background="#ffffff";
}
tr.onclick= function(){
var rowNum=i;
var ss=function(){x="你点击了第"+rowNum+"行"; return x}
alert(i);
console.innerHTML=ss;
}
//闭包的应用
//tr.onclick=(function(){
//var rowNum=i;
//return function(){
//console.innerHTML="你点击了第"+rowNum+"行";
//}
//})();
}
}
在function里this指向window
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
<script type="text/javascript">
var n = 2011;
function f1(){
var n=999;
var f2=(function (){
i=n;
return function(){alert(i)};
})();
return f2;
}
var result=f1();
result(); </script>
先去看看函数的原型,作用域链知识吧,这样方便你理解闭包~~