将python Lambda转换为Javascript

时间:2014-05-07 08:54:28

标签: javascript python lambda

我正在将以下代码从Python转换为JS。

lat *= (math.pi / 180.0)
lon *= (math.pi / 180.0)

n = lambda x: wgs84_a / math.sqrt(1 - wgs84_e2*(math.sin(x)**2))

x = (n(lat) + alt)*math.cos(lat)*math.cos(lon)
y = (n(lat) + alt)*math.cos(lat)*math.sin(lon)
z = (n(lat) * (1-wgs84_e2) +alt)*math.sin(lat)

大部分都没有问题,但我不知道如何将带有lambda函数的n =行转换为JS。

2 个答案:

答案 0 :(得分:2)

var n = function (x) { return wgs84_a / Math.sqrt(1 - wgs84_e2 * Math.pow(Math.sin(x), 2)) }

答案 1 :(得分:2)

JavaScript函数是可以动态创建的第一类对象,因此lambdas只是语言工作方式的一个特性。

这是一个粗略的翻译:

var n = function(x) {
    return wgs84_a / Math.sqrt(1 - wgs84_e2*Math.pow(Math.sin(x), 2));
};

与Python的lambda一样,该表达式将创建该函数并将其分配给n,但不会调用它。该代码稍后将通过n调用它。它也是一个关闭"因为它会在被调用时使用你在其中引用的变量(它具有对变量的持久引用,并且在它被调用时使用它们的值,而不是在它被调用时使用它们的值。 s创建)。

特点:

  • 使用n声明var

  • 使用function启动函数表达式。

  • 该函数的参数在()之后的function内给出了名称。

  • 使用return关键字从函数中返回值。

  • 使用JavaScript的各种Math函数,包括Math.pow而不是**(JavaScript没有运算符)。

如上所述的函数表达式在逐步执行代码时创建函数(就像任何其他表达式一样)。另一种方法是使用函数声明

function n(x) {
    return wgs84_a / Math.sqrt(1 - wgs84_e2*Math.pow(Math.sin(x), 2));
}

当执行进入包含它的范围时,这将创建该函数;它发生在该范围内的任何分步代码执行之前。 (人们有时称之为“#34;悬挂"因为无论它出现在何处,它都像声明被移动 - "悬挂" - 到范围的顶部。”它仍然使用它在调用时关闭的变量,而不是在它被创建时;它只是另一种创建功能的方式。