IE, FF try{}catch(){} ошибка?

#javascript #internet-explorer #firefox

#javascript #internet-explorer #firefox

Вопрос:

Я определил имя функции как _ , определил функцию fn

 function _(){};

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

fn(); 
  

в выводе FF _(), но вывод IE8 не определен, почему этот результат?

Ответ №1:

РЕДАКТИРОВАТЬ @kevinpeng благодаря обновлению до вопроса оригинальной версии

ie7 не поддерживает window.console (я не могу протестировать, так как у меня его нет)
ie8 поддерживает консоль, если вы открываете инструменты разработчика с помощью F12

в firefox вы можете использовать, без проблем.

чтобы не было ошибок в вашем коде:

Вы можете сделать это для console.log:

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

Ответ №2:

В Firefox и любом другом браузере, который следует за ES3 / ES5, возвращаемым значением должен быть объект функции, который вы вызываете «_».

Однако в IE8 он поднимает любые привязки переменных catch-statement к началу функции. например.,

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

эффективно ли

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

Обратите внимание, что это те же самые операторы var (они создаются и устанавливаются в undefined в начале функции и присваиваются определенному значению, когда выполнение достигает оператора var).