У меня есть следующие две небольшие скрипты:Переменная Scope Поведение в JSFiddle
Сценарий 1:
eval("local = 3;");
console.log(typeof local);
Function("console.log(typeof local);")();
Выход:
number
number
Сценарий 2:
eval("var local = 3;");
console.log(typeof local);
Function("console.log(typeof local);")();
Выходные :
number
undefined
Что дает? Должен ли eval локализовать в глобальном пространстве имен независимо от того, имеет ли строка строка var local = 3
или local = 3
? Если это так, не должно Function(...)
найти, что тип локального номера во втором случае не является неопределенным?
EDIT 1:
Я побежал оба сценария в JSFiddle и те были результаты, которые я получил. Тем не менее, когда я запускаю их вне JSFiddle, ожидаемые результаты происходят тогда, когда оба выхода является:
number
number
Вы не выполняете Script 2 в глобальной области, поэтому 'eval' создает локальную переменную. – bfavaretto
Это в глобальном масштабе. Но это было в JSFiddle, а не прямо из браузера. – moesef
См. Мой комментарий ниже, jsfiddle по умолчанию использует локальную область обработчика window.onload. – bfavaretto