不使用全局变量如何定义一个 count()每次调用输出第几次调用?

2015-08-17 21:13:39 +08:00
 xxxpara

一道面试题,这个要怎么做?

2914 次点击
所在节点    JavaScript
10 条回复
ChefIsAwesome
2015-08-17 21:17:45 +08:00
闭包。写个会返回另外一个函数的函数就完事了
aivier
2015-08-17 21:19:31 +08:00
如果没有 Cookie 和 LocalStorage ,也没有 HTML ,还不能和服务器通讯

....我想不出来
est
2015-08-17 21:21:36 +08:00
函数也算全局变量?
magicdawn
2015-08-17 21:24:08 +08:00
function count (){
console.log (++count.count );
}

count.count = 0;

函数也是可以带属性的,闭包就不说了
Gonster
2015-08-17 21:24:26 +08:00
var count = (function (){
var i = 0;
return function (){console.log (++i )}
})();
yangg
2015-08-17 21:35:50 +08:00
console.count ();
ChefIsAwesome
2015-08-17 21:50:34 +08:00
稍微扩展一下。 jQuery 的$是什么,$.ajax 是什么,$.fn 又是什么。
js 基本原理就这些东西了
zhuangzhuang1988
2015-08-18 08:55:28 +08:00
简单,定义类啊
an168bang521
2015-08-18 14:57:22 +08:00
哥们,这题应该是考查对闭包内的变量控制的;
可以下面这么写的,
<script>
function test (){
var i=1;
return function (){
console.log ("这是您第 "+(i++)+" 次调用 count ()")
};
}
count=test ();
count ();
count ();
count ();
count ();
count ();
count ();
</script>
这个在写 JS 时候很常用的;
还有 4 楼说的添加自定义属性也经常用的,尤其的做定时器 /动画的时候;
an168bang521
2015-08-18 15:08:07 +08:00
闭包和给函数添加自定义属性都可以;
但是给函数添加自定义属性,在性能上会更好;
因为这里用闭包实现的话。产生的作用域不销毁;
性能不如下面这种添加自定义属性的好
function count2 (){
console.log ("这是您第 "+(++count2.count )+" 次调用 count2 ()");
}
count2.count = 0;
count2 ();
count2 ();
count2 ();
count2 ();
count2 ();
count2 ();
这种实现方法比闭包,在性能上好些;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/213887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX