newborn2012 2013年09月26日
关于一个JS闭包面试题目的疑问
今天在网上看到一个javascript的面试题,如下:

f = function() {return true;};
g = function() {return false;};
(function() {
if (g() && [] == ![]) {
f = function f() {return false;};
function g() {return true;}
}
})();
alert(f()); // true or false ?

解释答案是:
(function() {
if (g() && [] == ![]) {
//应该看成if((g() && [] )== ![])
//因为g()是false后面那个&&[]就没起作用 整个都是false
//![]也是false 所以if成立 进入if块内
f = function f() {return false;};
//重新定义f
function g() {return true;}
//这句没用
}
})();
alert(f());
//false
源文档位于http://t240178168.iteye.com/blog/1633344
===================================================
最终答案确实是false,但是我拿这段代码调试了一下,却发现解释不怎么对,if语句中的g()返回不是false,而是true,if语句里面定义的函数g()这句不是没用,而是确实被调用了,这是为什么呢,求高手解释。


[cj205]楼下的答案是何等的扯淡,在此我必须要纠正下其中的错误,未免对查到此贴的人产生影响。
首先==的优先级是高于&&的 那么楼下的那个表达式分解就是扯淡的很。
其次,本题中的几个问题分别涉及到如下3个知识点
1.数组也是对象
2.function A()属于函数声明,会在javascript具体执行前作过一轮扫描。
3.非相同类型的值进行等值比较时,是要做类型转换的。
...全文
495 1 收藏 14
写回复
14 条回复

还没有回复,快来抢沙发~

发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告