f = function() {return true;}; g = function() {return false;};
(function() {
if (g() && [] == ![]) {
f = function f() {return false;};
function g() {return true;}
}
})();
console.log(f());
分析以上代码,结果为false.
函数定义的两种形式:
(1)var a = function(){}
这种只能先声明后调用
(2)function a(){}
这种可以先调用后声明
所以if中的g()在自己匿名函数的作用域中先找到
function g() {return true;}
然后[] == ![]解释:typeof []-->object类型但是空,![]-->Bealean类型是false,所有的空或0都是false.false==false返回true
最后进入if(true)后,改变了全局的f变量,所以返回的是false.