<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>使用var声明和有条件的赋值语句替代有条件的函数声明</title>
</head>
<body>
<script>
function f() {
return "global";
};
/*******有问题的写法(有条件的函数声明)********/
function test2(x) {
var ret = [];
if(x) {
function f() {
return "local";
};
ret.push(f());
}
ret.push(f());
return ret;
};
alert(test2(true)); //
alert(test2(false)); // (chrome结果:local, local, local;firefox结果:local, local, global)
/** 使用var声明和有条件的赋值语句替代有条件的函数声明 **/
function test(x) {
var g = f;
var ret = [];
if(x) {
g = function() {
return "local";
};
ret.push(g());
}
ret.push(g());
return ret;
};
alert(test(true)); // local, local
alert(test(false)); // global
</script>
</body>
</html>