<script type="text/javascript"> function f(x) { var a = 0; a++; x++; var inner = function() { return a + x; } return inner; } var test = f(1); alert(test()); </script>
(ps:var a = (function(){})(); 与 var a =new function(){}效果是一样的,均表示自执行函数。) 应用3: 下面的code是缓存的应用,catchNameArr。在匿名函数的调用对象中保存catch的值,返回的对象由于被CachedBox变量引用导致匿名函数的调用对象不会被回收,从而保持了catch的值。可以通过CachedBox.getCatch("regionId");来操作,若找不到regionId则从后台取,catchNameArr 主要是为了防止缓存过大。
复制代码 代码如下:
<script type="text/javascript"> var CachedBox = (function() { var cache = {}, catchNameArr = [], catchMax = 10000; return { getCatch: function(name) { if (name in cache) { return cache[name]; } var value = GetDataFromBackend(); cache[name] = value; catchNameArr.push(name); this.clearOldCatch(); return value; }, clearOldCatch: function() { if (catchNameArr.length > catchMax) { delete cache[catchNameArr.shift()]; } } }; })(); </script>
同理,也可以用这种思想实现自增长的ID。
复制代码 代码如下:
<script type="text/javascript"> var GetId = (function() { var id = 0; return function() { return id++; } })(); var newId1 = GetId(); var newId2 = GetId(); </script>