【问题标题】:Shallow & Deep Binding - What would this program print?浅绑定和深绑定——这个程序会打印什么?
【发布时间】:2013-03-21 14:43:47
【问题描述】:

我不知道该怎么做...

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

    function f3()
    {
        print x;
    };

    f2(f3);
};

对于以下两种绑定方法,程序会打印什么? A) 浅绑定 B) 深度绑定

感谢您的帮助!

【问题讨论】:

  • here。简而言之:深度绑定打印10,因为x的绑定在调用f2时发生,浅绑定打印6,因为xf3时绑定(作为@987654329的过程参数@) 从 f2 调用。

标签: binding programming-languages dynamic-binding static-binding


【解决方案1】:

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

  • 深度绑定在传递过程时绑定环境 作为论据。
  • Shallow binding 在 a 时绑定环境 过程实际上被调用。

深度绑定。

这里f3()获取f1()的环境并将x的值打印为10这是 f1() 的局部变量。

浅绑定。

f3()f2() 中被调用,因此得到 f2() 的环境并将 x 的值打印为 6这是 f2()

本地的

【讨论】:

    【解决方案2】:

    • 执行传递的子程序的调用语句的环境 (浅绑定)

    • 传递的子程序的定义环境(深 绑定)。

    在某些情况下,声明子程序的子程序也会传递 子程序作为参数。在这些情况下,深度绑定和临时绑定 是一样的。

    【讨论】:

      【解决方案3】:

      浅绑定:执行传递的子程序的调用语句的环境 深度绑定:定义传递的子程序的环境 Ad hoc binding:将子问题作为实参传递的调用语句的环境

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多