Binding 浅海;深度绑定-此程序将打印什么?

Binding 浅海;深度绑定-此程序将打印什么?,binding,programming-languages,dynamic-binding,static-binding,Binding,Programming Languages,Dynamic Binding,Static Binding,我不知道该怎么做 function f1() { var x = 10; function f2(fx) { var x; x = 6; fx(); }; function f3() { print x; }; f2(f3); }; 对于以下两种绑定方法,程序将打印什么? A) 浅装订 B) 深装订 谢谢你的帮助 只有当过程可以作为参数传递给函数时,深/浅绑定才有

我不知道该怎么做

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

    function f3()
    {
        print x;
    };

    f2(f3);
};
对于以下两种绑定方法,程序将打印什么? A) 浅装订 B) 深装订


谢谢你的帮助

只有当过程可以作为参数传递给函数时,深/浅绑定才有意义

  • 深度绑定在传递过程时绑定环境 作为论据
  • 浅绑定在 过程实际上是被调用的
深装订。 这里f3()获取f1()的环境,并将x的值打印为10,这是f1()的局部变量

浅装订。
f3()在f2()中被调用,因此获得f2()的环境,并将x的值打印为6,这是f2()的本地值。

•执行传递的子程序的call语句的环境 (浅装订)


•已通过子程序定义的环境(深度 绑定)

在某些情况下,声明子程序的子程序也会传递 作为参数的子程序。在这些情况下,深度绑定和特别绑定
都是相同的。

浅绑定:执行传递的子程序的call语句的环境 深度绑定:所传递子程序的定义环境 即席绑定:call语句的环境,该语句将子问题作为实际参数传递

请参见。简而言之:当调用
f2
时,
x的绑定发生在
f2
时,深绑定打印
10
,当从
f2
调用
f3
(作为
f2
的过程参数)时,浅绑定打印
6
作为
x
的绑定。