python Lambda到Javascript的转换

Conversion of python Lambda to Javascript

本文关键字:转换 Javascript Lambda python      更新时间:2023-09-26

我正在将以下代码从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)

这大部分都没有问题,但我不知道如何将n=行与lambda函数转换成JS

JavaScript函数是可以动态创建的一等对象,所以lambdas只是该语言的一个特性。

大致翻译如下:

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

就像Python的lambda一样,该表达式将创建函数并将其赋值给n,但不调用它。稍后的代码将通过n调用它。它也是一个"闭包",因为当它被调用时,它将使用你在它内部引用的变量(它对变量有一个持久的引用,并在调用时使用它们的值,而不是在创建时使用)。

特点:

  • 使用var声明n

  • 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));
}

当执行进入包含该函数的作用域时,创建该函数;它发生在执行该范围内的任何分步代码之前。(人们有时称之为"提升",因为不管它出现在哪里,它都像是将声明移动——"提升"——到作用域的顶部。)当被称为时,它仍然使用它关闭的变量,而不是在它被创建时;这只是创建函数的另一种方式。

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