关于一个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()这句不是没用,而是确实被调用了,这是为什么呢,求高手解释。
------解决方案--------------------是的他的解释答案 有问题
(function() {
if (g() && [] == ![]) {
f = function f() {return false;};
function g() {return true;} //函数声明,是预先解析
}
})();
//g() 是以函数内声明的那个,return true
(g() && []) 得 [] 并不是 true , ![] 得 false
[]==false 得 true,
.....