Верно ли, что замыкание создается в следующих случаях для foo, но не для bar?
Случай 1:
<script type="text/javascript">
function foo() { }
</script>
foo - это замыкание с цепочкой областей видимости только с глобальной областью.
Случай 2:
<script type="text/javascript">
var i = 1;
function foo() { return i; }
</script>
аналогично случаю 1.
Случай 3:
<script type="text/javascript">
function Circle(r) {
this.r = r;
}
Circle.prototype.foo = function() { return 3.1415 * this.r * this.r }
</script>
в этом случае Circle.prototype.foo (который возвращает область круга) относится к закрытию только с глобальной областью. (это замыкание создается).
Случай 4:
<script type="text/javascript">
function foo() {
function bar() {
}
}
</script>
здесь foo является закрытием только с глобальной областью, но bar не является закрытием (пока), потому что функция foo не вызывается в коде, поэтому закрытие bar никогда создано. Он будет существовать только в том случае, если вызывается foo, а замыкание bar будет существовать до тех пор, пока foo не вернется, а закрытие bar будет собрано в мусор, поскольку ссылки на него вообще нет.
Итак, когда функция не существует, нельзя вызвать, на которую нельзя ссылаться, тогда закрытие еще не существует (еще не создано). Только когда функция может быть вызвана или может быть указана, тогда фактически создается замыкание?