错题修改
function getValues(flag) {
if (flag) {
function getValue() { return 'a'; }
} else {
function getValue() { return 'b'; }
}
return getValue();
}
var getvalue=null;
if (flag) {
getValue = function(){ return 'a'; }
} else {
getValue = function() { return 'b'; }
}
return getValue();
}
这道题是考函数声明与函数表达式的区别,原题的写法,是在两个逻辑分支里面各有一个函数声明,但是对于函数声明,解析器会率先读取并且让其在执行任何代码前可用,意思就是别的代码还没运行呢,两个getValue声明已经被读取,所以总是执行最新的那个。函数表达式,当解析器执行到它所在的代码行时,才会真正被解释执行,所以两个逻辑分支可以分别执行
//另外,还有一点需要提醒一下,函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式:
//函数声明:
function 函数名称 (参数:可选){ 函数体 }
函数表达式:
function 函数名称(可选)(参数:可选){ 函数体 }
网友评论