Я всегда думал, что вложенные вызовы функций имеют доступ к области над ними независимо от того, где функция была определена (в приведенном ниже примере я думал, что функция printsomething
будет иметь доступ к "что-то" в функции runeverything
). Согласно приведенной ниже скрипке, это не так. Должна ли функция printsomething
быть определена (а не просто вызвана) во внешней функции runeverything
, чтобы иметь доступ к локальным переменным, определенным в другой функции runeverything
?
Это важно для меня сейчас, потому что модули узлов поднимаются наверх, когда они импортируются. Это создает проблемы для меня!
function foo(){
function printsomething() {
$('#test').text(something || 'nothing');
};
var something = 'something';
function runeverything() {
printsomething(); //returns "something is not defined"
}
runeverything();
};
foo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1 id="test"></h1>