我正在将以下代码从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。
答案 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;悬挂"因为无论它出现在何处,它都像声明被移动 - "悬挂" - 到范围的顶部。”它仍然使用它在调用时关闭的变量,而不是在它被创建时;它只是另一种创建功能的方式。