Показать сообщение отдельно
  #3 (permalink)  
Старый 06.01.2010, 19:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

если не ошибаюсь, что определения функций с помощью
function tryIt2(){}

являются глобальными, и сами функции создаются до выполнения самого скрипта(то есть вызвать ф-цию tryIt2() вы можете из любого места кода, даже ранее объявления самой ф-ции)
таким образом ф-ция во время своего создания даже не подозревает, что она находится внутри with
объявление же вида
var tryIt1 = function () {}

является локальным, и ф-ция создается во время выполнения кода.
таким образов до этого места в коде она еще не существует.
и когда создается, то она в курсе, что находится внутри with
var obj = {
    test: function () {return 'done'}
};
with (obj) {
    alert(typeof test); // 'function'
	alert((typeof tryIt1)+'|'+(typeof tryIt2)); // 'undefined|function'
    var tryIt1 = function () {
        return test() + 1;
    }
    function tryIt2() {
		return 2;
        //return test() + 1;
    }
	alert((typeof tryIt1)+'|'+(typeof tryIt2)); // 'function|function'
}

если я ошибаюсь, то поправьте меня.точно не могу вспомнить, что по этому поводу стандарт гласит
в мозилле же ваш код работает, так как в ней все ф-ции создаются по ходу выполнения кода, а не заранее
Ответить с цитированием