IE,FF试试{} catch(){} bug?

时间:2011-10-23 13:09:33

标签: javascript internet-explorer firefox

我将函数名定义为_,定义函数fn

function _(){};

function fn(){ 
    try{
       console.info(_);
    }catch(_){
       //
    } 
    return _;
}

fn(); 

在FF输出_()中,但IE8输出未定义,为什么会出现这种结果?

2 个答案:

答案 0 :(得分:0)

编辑 @kevinpeng感谢您更新问题原始版本

ie7不支持window.console(我无法测试,因为我没有它)
如果您通过F12打开开发人员工具,ie8支持它控制台

在firefox中你可以使用,没问题。

所以不要在代码中出错:

你可以为console.log执行此操作:

function myConsole(param) {
    if (window.console && window.console.log) {
        window.console.log(param);
    }
}

答案 1 :(得分:0)

在Firefox和ES3 / ES5之后的任何其他浏览器中,返回值应该是您调用“_”的函数对象。

然而,在IE8中,它将任何catch语句变量绑定提升到函数的顶部。如,

function fn() {
  try {
    return foo;
  }
  catch(foo) {}
}

有效地做到了

function fn() {
  var foo;
  try {
    return foo;
  }
  catch(foo) {}
}

请注意,这是相同的var语句(它们在函数开头创建并设置为undefined,并在执行到var语句时分配一个特定值)。