В вашем первом примере
function myBigFunction() {
var myValue;
subFunction1();
}
function subFunction1() {
console.log(myValue);
} //this will show a reference error
здесь myValue включено в функцию myBigFunction()
, поэтому имеет область видимости блока.
Область видимости блока означает любой код в этом блоке (здесь функцияопределяет блок) может использовать эту переменную, если функция содержит другую функцию (определение функции) и внутреннюю функцию, использующую эту переменную, то она будет передана в замыкании на внутреннюю функцию.2-й сценарий точно такой же, как я объяснил здесь.
function getScore() {
var num1 = 2,
num2 = 3;
function add() {
return name + ' scored ' + (num1 + num2);
}
return add();
} //this is ok
В вышеприведенном примере num1 и num2 объявлены в функции getScore()
, и у него есть внутренняя функция add()
, так как add function использует num1 и num2, это будетпередается как закрытие функции add()
, и при доступе к этим переменным ошибки не будет.
, но в первом примере переменная доступна вне области видимости и как переменная, доступ к которой находится вне этой функции, она выиграла 'Он будет недоступен, и он выдаст ошибку ссылки.
Я надеюсь, что объяснение прояснит ваше понимание.чтобы понять это полностью, ознакомьтесь с концепцией JavaScript и концепцией замыкания.