代码之家  ›  专栏  ›  技术社区  ›  Elle Fie

在Javascript中,Tcl的“uplevel”等效于什么?

  •  1
  • Elle Fie  · 技术社区  · 6 年前

    Tcl的 uplevel 命令将 eval 提供的字符串位于比当前子例程更高的堆栈帧中。

    Javascript中是否有等效的语言?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Donal Fellows    6 年前

    最常见的使用 uplevel 在Tcl中,通过让调用方传入匿名函数,在JS中完成。(有时需要对变量范围进行欺骗。)

    proc iterSquares {var script} {
        upvar 1 $var v
        for {set i 0} {$i <= 10} {incr i} {
            set v [expr {$i ** 2}]
            uplevel 1 $script
        }
    }
    
    iterSquares x {
        puts "I've got a $x"
    }
    
    function iterSquares(callback) {
        for (var i = 0; i <= 10; i++) {
            callback(i ** 2);
        }
    }
    
    iterSquares(function(x) {
        console.log("I've got a", x);
    });
    

    但是没有真正的等效形式可以与更一般的形式相比,它们在许多方面更像Lisp宏扩展(虽然也不相同)。