Вы всегда можете передать ссылку на функцию, которую вы определяете, потому что
Функция не должна иметь все доступное во время определения, скорее это требование в то время вызова.
Это также фундаментально для рекурсии. например,
function getFactorial(num) {
if (num <= 2) {
return num;
}
return num * getFactorial(num - 1);
}
Возможно, следующее поможет вам понять больше:
function getType() {
return typeof getType;
}
Выше функция всегда вернет "function"
.
Как насчет другой:
function getTypeOfX() {
return typeof myObj.x;
}
Вы сможете определить эту функцию, но как только вы вызовете ее, используя getTypeOfX()
, вы получите ошибку, потому что myObj
не определен во внешней / глобальной области видимости определение функции.
Если вы попробуете это в консоли. Вы можете сделать
var myObj = {
x: ""
}
даже после определения функции и снова вызвать getTypeOfX()
, чтобы увидеть, что теперь она печатает "string"
.
Вывод: вот что упомянул @Quentin
:
Variables used inside a function are not evaluated until the function is called.