Причина, по которой работает второй пример, заключается в том, что вы определяете myvar
как глобальную переменную (доступную из любого места).
Первый пример не работает, поскольку переменная определена в пределах функциональной области (что означает, что она недоступна для всех, кроме области видимости этой функции, и область функций, определенных в области этой родительской функции).
Как указано в комментариях, это именно то, как работает JavaScript. Если это проблема, с которой вы сталкиваетесь, то, вероятно, настало время переосмыслить вашу архитектуру.
Один общий шаблон для определения общих переменных как свойств родительских объектов или функций. Например:
$(function() {
var funcOne = function() {
this.sharedVal = 'stack overflow';
};
var funcTwo = function() {
console.log(funcOne.sharedVal);
};
});
Таким образом, вы можете иметь различные функции, которые способны делиться своими свойствами внутри другого в других функций, в то же время сохраняя глобальное пространство имен в чистоте. Обратите внимание, однако, что в этом примере простой var x = 'something';
, который не связан как свойство другой функции, будет делать то же самое.
Это так, как оно работает. прочитайте http: // stackoverflow.com/questions/500431/javascript-variable-scope – Sarath
Да, читайте о области JS. – enguerranws
Функции создают область. Переменные, объявленные с помощью 'var', являются * локальными * к этой функции и не могут быть доступны за ее пределами. Переменная существует только в момент, когда выполняется код (при отсутствии замыканий). –