论坛首页 入门技术论坛

javascrpt竞答,进来看看了

浏览 5666 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-03-30  
第一:
<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>


请大家我答案按序号写明白。如果回答了,也说出理由供大家学习
   发表时间:2008-03-30  
第一答案是 0 1 2
(function(){})(); 这样的形式表示一开始就运行function这个匿名函数,而无需外部调用.所以uniqueID = function() { return id++; };  但id是引用外部的var变量.所以外部的var一直没法给内存回收. 所以每次return id的时候,就会在内存里面寻找id这个变量. 最后将它返回给调用函数
0 请登录后投票
   发表时间:2008-03-30  
第2答案是  function() { return id++; };
将一个内部的匿名函数的引用作为结果返回


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

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

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


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

0 请登录后投票
   发表时间:2008-03-30  
第5 应该有错 ..过程类似第1 . 但它返回的是一个数字 uniqueID = 0 . 所以uniqueID()是出错D

第6  0 解释同 5

第7 将function结构体输出
0 请登录后投票
   发表时间:2008-03-31  
第一题:
uniqueID = (function() {
   var id = 0;
   return function() { return id++; };
})();

alert(uniqueID());
alert(uniqueID());
alert(uniqueID());

1,在定义一个匿名Function后立即运行此方法,产生闭包1放在window作用域下,引用计数器加1,运行后不被回收。
2,定义一个局部id变量(不能被外界直接访问)
3,返回一个匿名Function,可以被外作用域直接访问,此方法内有一个对闭包1中的一个局部属性的引用,此id对象引用计数器加1.
4,由于返回的匿名方法持有闭包1中的id引用(id局部变量引用Counter>0不被回收), 累加器得以实现。
0 请登录后投票
   发表时间:2008-03-31  
第二题:
<script>
uniqueID = function() {
  var id = 0;
  return function() { return id++; };
};
alert(uniqueID());
alert(uniqueID());
alert(uniqueID());
</script>

1,生名一个Function 对象uniqueID到当前作用域下
2,执行这个方法,最后返回一个Function 对象
0 请登录后投票
   发表时间:2008-03-31  
第三题: 
<script>
uniqueID = function() {
  var id = 0;
  return function() { return id++; };
};

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

1,生名一个Function 对象uniqueID到当前作用域下
2,以属性方式查询当前作用域下的uniqueID属性,方法对象
0 请登录后投票
   发表时间:2008-03-31  
第四题:
<script>
var uniqueID = (function() {
  var id = 0;
  var inft = function() { return id++; }
  return inft;
})();

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

1,运行一个匿名方法
2,初始化局部属性,并返回一个局部对象(inft)引用给调用者,其中inft作用域内有对父作用域的 id属性引用(id引用counter = 1),所以在结束方法后父作用域的id不被回收。
3, 把方法运行返回引用绑定到当前作用域的uniqueID上。
2,当前作用域下调用uniqueID方法,由于执行期id属性引用counter永等于1,执行期永不被回收,实现记数器
0 请登录后投票
   发表时间:2008-03-31  
第五题:
<script>
var uniqueID = (function() {
var id = 0;
var inft = function() { return id++; }
return inft();
})();

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

1,运行一个匿名方法
2,初始化局部属性. 生成一个匿名方法闭包,对其父作用域一个对象的引用。(此对象与所引用对象在此例中生命周期相等)
3,inft 保存局部匿名函数一个引用
4,执行inft方法,返回“0”原对象。
5, 方法动作结束,查询inft局部对象引用counter为0时回收对象,inft的回收导至局部的id引用减1,id引用counter为0触发回收操作。
3, 返回结果“0”传值到当前作用域的uniqueID里。
2,由于当前作用域下的uniqueID是原数据“0”,而不是方法对象,所以不能被“()”执行。报错
0 请登录后投票
   发表时间:2008-03-31  
第六题:
<script>
var uniqueID = (function() {
var id = 0;
var inft = function() { return id++; }
return inft();
})();

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

与第五题同理,运行时输出当前作用域下的uniqueID属性“0”
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics