Неглубокий и глубокий переплет — что будет печатать эта программа?

Я не уверен, как это сделать...

function f1()
{
    var x = 10;
    function f2(fx)
    {
        var x;
        x = 6;
        fx();
    };

    function f3()
    {
        print x;
    };

    f2(f3);
};

Что выведет программа для каждого из следующих двух методов привязки? А) Поверхностное связывание Б) Глубокое связывание

Спасибо за помощь!


person Ricky    schedule 21.03.2013    source источник
comment
см. здесь. в двух словах: глубокая привязка печатает 10, так как привязка x происходит, когда вызывается f2, неглубокая привязка печатает 6, поскольку x привязывается, когда f3 (являющийся параметром процедуры для f2) вызывается из f2.   -  person collapsar    schedule 23.03.2013


Ответы (3)


Глубокая/поверхностная привязка имеет смысл только тогда, когда процедура может быть передана функции в качестве аргумента.

  • Глубокая привязка связывает среду во время передачи процедуры в качестве аргумента.
  • Поверхностное связывание связывает среду во время фактического вызова процедуры.

Глубокая привязка.

Здесь f3() получает окружение f1() и выводит значение x как 10, которое является локальным переменная f1().

Неглубокая привязка.

f3() вызывается в f2() и, следовательно, получает среду f2() и печатает значение x как 6, которое является локальным в f2()

person Mari Ganesh Kumar    schedule 29.07.2015

• Среда оператора вызова, который запускает переданную подпрограмму (поверхностное связывание).

• Среда определения передаваемой подпрограммы (глубокая привязка).

В некоторых случаях подпрограмма, объявляющая подпрограмму, также передает эту подпрограмму в качестве параметра. В этих случаях глубокая привязка и специальная привязка — это одно и то же.

person Community    schedule 24.04.2017

Неглубокая привязка: среда оператора вызова, который приводит в действие переданную подпрограмму. Глубокая привязка: среда определения переданной подпрограммы. Нерегламентированная привязка: среда оператора вызова, который передает подзадачу в качестве фактического параметра.

person Karunakar    schedule 19.09.2018