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

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

0 голосов
/ 23 октября 2011

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

function _(){};

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

fn(); 

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

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

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

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

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

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

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

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

0 голосов
/ 23 октября 2011

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

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

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

, чтобы не допустить ошибки в вашем коде:

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

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