下面是一个小小的面试题,判断一下alert(g())的值是什么就可以了。
var f = function() {return true;};
var g = function() {return false;};
(function() {
if (g() && [] == ![]) {
f = function f() {
return false;
};
function g() {
return true;
}
}
})();
alert(![]) //返回是false
alert(typeof ![]) //返回是boolean
alert([] == ![]) //返回是true
alert(g() && ([] == ![])) //返回是true
alert((g() && []) == ![]) //返回是false
alert(g())//返回是false
分析:首先两个函数,f运行之后返回true,g运行之后返回false。下面是一个闭包的写法,其中里面有个判断。因为g()是false那么就返回false。&&和= = 同时作为判断条件的时候,可以看成g() && ([] == ![]),那么这样一来就好判断了因为g()返回的是false,所以这个条件将最终返回false,即if中的不执行。所以alert(g())返回是false