在下面的这段代码中输出的怎么不是b呀?

foo();//Uncaught TypeError: foo is not a function
var a=true;
if(a){
    function foo(){console.log("a");}
}else{
    function foo(){console.log("b");}
}
阅读 1.9k
3 个回答

看看这个吧:命名函数表达式探秘(http://justjavac.com/named-fu...

函数声明还有另外一个重要的特点,即通过条件语句控制函数声明的行为并未标准化,因此不同环境下可能会得到不同的结果。有鉴于此,奉劝大家千万不要在条件语句中使用函数声明,而要使用函数表达式。

你这个代码是从书上赋值下来的?书上不能写这么2的代码吧?
学习编程不是钻牛角尖,对于一些乱七八糟的说法,写法和代码,不要理会。就你的代码而言,chrome下执行到foo()的时候,浏览器就会自动去找这个函数。但是foo()方法在语句块内,浏览器没找到,就报错了。不排除其他浏览器能执行过去,不过现在JavaScript语言正在逐渐严谨化,这种写法会逐渐被淘汰。

报错是因为函数还未声明。。。并且由于a为true也不会是b啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题