c********l 发帖数: 8138 | 1 这个陷阱,我敢说,如果不亲自run一遍,根本答不对
完全能够枪毙所有的阿三
给定javascript程序:
var functions = [];
(function foo() {
for (var i=0; i<5; i++ ) {
var f = function() {
console.log(i);
}
functions.push(f);
}
for (var i=0; i<5; i++ ) {
f = new Function("console.log(i);");
functions.push(f);
}
})();
for (var i=0; i<10; i++ ) {
functions[i]();
}
问最后的console会输出什么?
我不需要读者贴答案,
因为随便一个读者只要直接在chrome里面跑一遍马上出结果,都不需要IDE
关键是需要体会陷阱的奥妙 |
r****y 发帖数: 26819 | 2 这个例子偏简单了,看了good parts那本书第37页就知道答案。还可再复杂点。
【在 c********l 的大作中提到】 : 这个陷阱,我敢说,如果不亲自run一遍,根本答不对 : 完全能够枪毙所有的阿三 : 给定javascript程序: : var functions = []; : (function foo() { : for (var i=0; i<5; i++ ) { : var f = function() { : console.log(i); : } : functions.push(f);
|
q*c 发帖数: 9453 | 3 这种东西越发说明闭包这玩意就像 ++i+i++ 这些奇技淫巧一样。
【在 c********l 的大作中提到】 : 这个陷阱,我敢说,如果不亲自run一遍,根本答不对 : 完全能够枪毙所有的阿三 : 给定javascript程序: : var functions = []; : (function foo() { : for (var i=0; i<5; i++ ) { : var f = function() { : console.log(i); : } : functions.push(f);
|
g****r 发帖数: 1589 | 4 i++这种不是必须的东西
闭包用好了还是有用的,不搞明白了很容易自己都不知道程序运行结果是怎么回事
【在 q*c 的大作中提到】 : 这种东西越发说明闭包这玩意就像 ++i+i++ 这些奇技淫巧一样。
|
c********l 发帖数: 8138 | 5 这个例子没有你想象得那么简单。包含了至少两个子陷阱。那本good parts只提了其中一
个sub trap。你可以先心算结果,再和浏览器比较一遍。
【在 r****y 的大作中提到】 : 这个例子偏简单了,看了good parts那本书第37页就知道答案。还可再复杂点。
|
c********l 发帖数: 8138 | 6 那些什么二叉平衡树其实也差不多,平时根本用不着
至于p=np更如此
【在 q*c 的大作中提到】 : 这种东西越发说明闭包这玩意就像 ++i+i++ 这些奇技淫巧一样。
|
z*******3 发帖数: 13709 | 7 不不,p!=np上升到了基础数学高度
是证明题,不是计算题,数学应用本身有很多领域,不仅仅是cs
【在 c********l 的大作中提到】 : 那些什么二叉平衡树其实也差不多,平时根本用不着 : 至于p=np更如此
|
z*******3 发帖数: 13709 | 8 上次看到有个谁说写lips很爽
想听听他怎么说这个哈 |
p*****2 发帖数: 21240 | 9 这个不算太难理解吧?有JS经验的应该都能推出来吧? |
a*****e 发帖数: 1700 | 10 你这个坑挖得不够深,仅仅涉及到了 scoping 的问题。还要加上 global var/local
var/mutation 才全面。
试试这个:
var functions = [];
(function foo() {
for (var i=0; i<5; i++ ) {
var f = function() {
console.log(i);
}
functions.push(f);
}
for (var i=0; i<5; i++ ) {
var f = function() {
var j = i; console.log(j);
}
functions.push(f);
}
for (var i=0; i<5; i++ ) {
var f = function() {
i++; console.log(i);
}
functions.push(f);
}
for (var i=0; i<5; i++ ) {
f = function () {
var j = i; j++; console.log(j);
}
functions.push(f);
}
})();
for (var i=0; i<20; i++ ) {
functions[i]();
}
【在 c********l 的大作中提到】 : 这个陷阱,我敢说,如果不亲自run一遍,根本答不对 : 完全能够枪毙所有的阿三 : 给定javascript程序: : var functions = []; : (function foo() { : for (var i=0; i<5; i++ ) { : var f = function() { : console.log(i); : } : functions.push(f);
|
|
|
c********l 发帖数: 8138 | 11 你把“new Function”那段给漏了
这是第二个sub trap,这比第一个sub trap更隐晦
again,我还是建议你们先想一个答案,再真正在console里面run一遍
我觉得我估计这道题不但要kill掉所有的阿三,还要kill掉所有的老中。
【在 a*****e 的大作中提到】 : 你这个坑挖得不够深,仅仅涉及到了 scoping 的问题。还要加上 global var/local : var/mutation 才全面。 : 试试这个: : var functions = []; : (function foo() { : for (var i=0; i<5; i++ ) { : var f = function() { : console.log(i); : } : functions.push(f);
|
a*****e 发帖数: 1700 | 12 这种东西只是暴露了这些个语言的设计者的知识缺陷。
闭包从lisp开始就有明确的语义和实现方法,只是需要学习一点程序语言的基础理论知
识而已。
什么是民科,看看 JS 的设计就知道了,不只是闭包,坑多了去了。
【在 q*c 的大作中提到】 : 这种东西越发说明闭包这玩意就像 ++i+i++ 这些奇技淫巧一样。
|
b***e 发帖数: 1419 | 13 5 5 5 5 5 5 6 7 8 9
不过, 谁写第一种可以教。谁写第二种的立刻开除。
【在 c********l 的大作中提到】 : 你把“new Function”那段给漏了 : 这是第二个sub trap,这比第一个sub trap更隐晦 : again,我还是建议你们先想一个答案,再真正在console里面run一遍 : 我觉得我估计这道题不但要kill掉所有的阿三,还要kill掉所有的老中。
|
q*c 发帖数: 9453 | 14 闭包更加不是必须的东西。
【在 g****r 的大作中提到】 : i++这种不是必须的东西 : 闭包用好了还是有用的,不搞明白了很容易自己都不知道程序运行结果是怎么回事
|
t***t 发帖数: 6066 | 15 p=np是最深刻的计算机理论之一。解决了将是最大突破之一,居然被你如此评论。
【在 c********l 的大作中提到】 : 那些什么二叉平衡树其实也差不多,平时根本用不着 : 至于p=np更如此
|
h*****a 发帖数: 1718 | 16 p基本上不可能等于np,只不过是什么时候能证明出来的问题。
【在 t***t 的大作中提到】 : p=np是最深刻的计算机理论之一。解决了将是最大突破之一,居然被你如此评论。
|
g****r 发帖数: 1589 | 17 不觉得,没有闭包,写各种callback和lamada至少得多写5倍代码,像Java就得搞一堆
匿名类出来
【在 q*c 的大作中提到】 : 闭包更加不是必须的东西。
|
z****e 发帖数: 54598 | 18 java其实除了搞ui的
其他人不怎么用匿名类
现在也就是android那些人用得多
server side很多时候不用
【在 g****r 的大作中提到】 : 不觉得,没有闭包,写各种callback和lamada至少得多写5倍代码,像Java就得搞一堆 : 匿名类出来
|
z****e 发帖数: 54598 | 19 java8 有lambda了
以后可以少写很多匿名类
【在 g****r 的大作中提到】 : 不觉得,没有闭包,写各种callback和lamada至少得多写5倍代码,像Java就得搞一堆 : 匿名类出来
|
g****r 发帖数: 1589 | 20 呵呵,出来我也去瞧瞧
【在 z****e 的大作中提到】 : java8 有lambda了 : 以后可以少写很多匿名类
|
|
|
t***t 发帖数: 6066 | 21 最近写一个parser, 觉得纳母达还是很有用的。现在我不得不写很冗长的类。其实我就
想移进,reduce等等。但是不得不每个action写个类。
【在 g****r 的大作中提到】 : 不觉得,没有闭包,写各种callback和lamada至少得多写5倍代码,像Java就得搞一堆 : 匿名类出来
|
q*c 发帖数: 9453 | 22 写代码那点时间根本不算啥~和轻松读懂代码,不出错比较。
担心代码行数实在是我无法理解的事情。 何况也没有5倍那么多,何况整体更是不多。
【在 g****r 的大作中提到】 : 不觉得,没有闭包,写各种callback和lamada至少得多写5倍代码,像Java就得搞一堆 : 匿名类出来
|
t***t 发帖数: 6066 | 23 99%的人估计都这么认为。
但是,这么直觉上正确的事就是没法证明,让我觉得一旦证出,这个证明本身将是极其
重要
的,影响极大的。
【在 h*****a 的大作中提到】 : p基本上不可能等于np,只不过是什么时候能证明出来的问题。
|
g****r 发帖数: 1589 | 24 我不觉得可读性有啥问题,可读性都是和编程习惯有关的,不管啥代码特性滥用了都会
有可读性问题,各种语言特性都是有相应的编码规范结合来用的,OO的编程规范
pattern之类的更多,只不过训练讨论的更多,现在基本不会有谁写出可读性很差的OO
来罢了。所以可读性从来都是程序员的问题,你非要滥用语言的特性就不要怪别人
就比如你写一堆i++i++i++当然谁都看不懂
你就正常点写个i++, i--有谁会看不懂?
闭包正常写都是很一目了然的。我不相信有了i++,你还会去写i=i+1,虽然就差俩字符
,有简单的为啥不用简单的,程序员都是懒人
【在 q*c 的大作中提到】 : 写代码那点时间根本不算啥~和轻松读懂代码,不出错比较。 : 担心代码行数实在是我无法理解的事情。 何况也没有5倍那么多,何况整体更是不多。
|
p*****2 发帖数: 21240 | 25
OO
顶大牛
【在 g****r 的大作中提到】 : 我不觉得可读性有啥问题,可读性都是和编程习惯有关的,不管啥代码特性滥用了都会 : 有可读性问题,各种语言特性都是有相应的编码规范结合来用的,OO的编程规范 : pattern之类的更多,只不过训练讨论的更多,现在基本不会有谁写出可读性很差的OO : 来罢了。所以可读性从来都是程序员的问题,你非要滥用语言的特性就不要怪别人 : 就比如你写一堆i++i++i++当然谁都看不懂 : 你就正常点写个i++, i--有谁会看不懂? : 闭包正常写都是很一目了然的。我不相信有了i++,你还会去写i=i+1,虽然就差俩字符 : ,有简单的为啥不用简单的,程序员都是懒人
|
h****r 发帖数: 2056 | 26 最深刻的数学猜想之一,意义远高于计算机理论。
任何在计算机行当里混的人是没有智力解决这个猜想的。得等纯数学的天才出手。
这其实是个哲学问题: 你解决不了在当前层次面临的问题,只有到了更高一层才能解
决。
【在 t***t 的大作中提到】 : p=np是最深刻的计算机理论之一。解决了将是最大突破之一,居然被你如此评论。
|
r****y 发帖数: 26819 | 27 除了第一部分,后面那部分没有什么陷阱啊。完全是用字符串创建一个Function objec
t的用法。关键是调用这些创建的Function object时,i是个全局变量,简直都想不出
还能有什么其它可能性。所以太简单了。完全等于这样:
f = new Function("console.log(i)");
i = 5;
f();
f = new Function("console.log(i)");
i = 6;
f();
...
就这个,版上多少人会写不出答案来?
【在 c********l 的大作中提到】 : 这个陷阱,我敢说,如果不亲自run一遍,根本答不对 : 完全能够枪毙所有的阿三 : 给定javascript程序: : var functions = []; : (function foo() { : for (var i=0; i<5; i++ ) { : var f = function() { : console.log(i); : } : functions.push(f);
|
x****u 发帖数: 44466 | 28 我压10伪币这个问题最终不是人类独立解决的。
【在 h****r 的大作中提到】 : 最深刻的数学猜想之一,意义远高于计算机理论。 : 任何在计算机行当里混的人是没有智力解决这个猜想的。得等纯数学的天才出手。 : 这其实是个哲学问题: 你解决不了在当前层次面临的问题,只有到了更高一层才能解 : 决。
|
h*****a 发帖数: 1718 | 29 和什么动物或者植物一起合作能解决?:)
【在 x****u 的大作中提到】 : 我压10伪币这个问题最终不是人类独立解决的。
|
t***t 发帖数: 6066 | 30 you mean god?
【在 x****u 的大作中提到】 : 我压10伪币这个问题最终不是人类独立解决的。
|