我为我狂
EASYJF的狂人
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>javascrpt作用域的分析
javascrpt作用域的分析
    作者:我为我狂 来源: 发表时间:2008-04-01

 
 
第一: 
<script> 
uniqueID = (function() { 
var id = 0; 

return function() { return id++; }; 
})(); 

alert(uniqueID()); 
alert(uniqueID()); 
alert(uniqueID()); 
</script> 

第二: 
<script> 
uniqueID = function() { 
var id = 0; 

return function() { return id++; }; 
}; 

alert(uniqueID()); 
alert(uniqueID()); 
alert(uniqueID()); 
</script> 

第三: 
<script> 
uniqueID = function() { 
var id = 0; 

return function() { return id++; }; 
}; 

alert(uniqueID); 
alert(uniqueID); 
alert(uniqueID); 
</script> 

第四: 
<script> 
var uniqueID = (function() { 
var id = 0; 
var inft = function() { return id++; } 
return inft; 
})(); 

alert(uniqueID()); 
alert(uniqueID()); 
alert(uniqueID()); 
</script> 

第五: 
<script> 
var uniqueID = (function() { 
var id = 0; 
var inft = function() { return id++; } 
return inft(); 
})(); 

alert(uniqueID()); 
alert(uniqueID()); 
alert(uniqueID()); 
</script> 

第六: 
<script> 
var uniqueID = (function() { 
var id = 0; 
var inft = function() { return id++; } 
return inft(); 
})(); 

alert(uniqueID); 
alert(uniqueID); 
alert(uniqueID); 
</script> 

第八: 
<script> 
var uniqueID = function() { 
var id = 0; 
var inft = function() { return id++; } 
return inft(); 
}; 

alert(uniqueID); 
alert(uniqueID); 
alert(uniqueID); 
</script>


第一答案是 0 1 2
(function(){})(); 这样的形式表示一开始就运行function这个匿名函数,而无需外部调用.所以uniqueID = function() { return id++; }; 但id是引用外部的var变量.所以外部的var一直没法给内存回收. 所以每次return id的时候,就会在内存里面寻找id这个变量. 最后将它返回给调用函数

第2答案是 function() { return id++; };
将一个内部的匿名函数的引用作为结果返回


第3是function() {
var id = 0;

return function() { return id++; };
};

UniqueId就是 对function的引用.所以输出来就是function的结构体


第4 同第1
其实就是将原先的匿名函数,分配了函数名

第5 应该有错 ..过程类似第1 . 但它返回的是一个数字 uniqueID = 0 . 所以uniqueID()是出错D

第6 0 解释同 5

第7 将function结构体输出

 

 
 

(阅读 )   评论数(:0)
评论】 【收藏】
评论:共0条

发表评论:
发表人:
评论: 
验证码:
请输入前面图中的四位验证码,字母不区分大小写
  
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率