javascript中函数执行期间使用参数执行操作的规则

javascript中函数执行期间使用参数执行操作的规则,javascript,Javascript,在JavaScript中,我们可以定义如下函数: function threePly(input_int) { return input_int*3; } threePly(12); //returns: 36 threePly(12+3) //returns: 45 然后像这样执行它: function threePly(input_int) { return input_int*3; } threePly(12); //returns: 36 threePly(12

在JavaScript中,我们可以定义如下函数:

function threePly(input_int)
{
    return input_int*3;
}
threePly(12); //returns: 36
threePly(12+3) //returns: 45
然后像这样执行它:

function threePly(input_int)
{
    return input_int*3;
}
threePly(12); //returns: 36
threePly(12+3) //returns: 45
但是,我们也可以进行如下操作:

function threePly(input_int)
{
    return input_int*3;
}
threePly(12); //returns: 36
threePly(12+3) //returns: 45
在哪里可以找到使用函数执行参数执行这些操作的规则?如何知道这是可能的

在哪里可以找到使用函数执行参数执行这些操作的规则

从根本上说,答案是:In:调用函数主要由抽象操作完成,它在进行调用之前执行抽象操作以计算参数的值(“…让__;成为计算AssignmentExpression的结果”)。这告诉您,作为参数给出的表达式在传递给函数之前进行求值

但这是几乎所有其他编程语言所共有的一个基本问题:函数参数的值可以通过使用表达式来确定。上面的链接只是JavaScript规范的表达方式


在我所见过的任何带有函数参数的编程语言中,唯一不正确的情况是在相对较少的语言中,它们能够通过引用传递变量(例如
ref
out
C#中的参数)。在这些语言中,不能使用表达式作为传递引用参数的参数,因为它需要引用一个变量。(您可以在这些相同的语言中使用传递值参数)JavaScript是一种纯粹的传递值语言,因此不适用。

无论您在ParentHase中放置什么,都会在传递给函数之前进行计算。您甚至可以根据需要多次对其进行分层

var x=logE(双倍(三倍)(四分之一(12))--它将在季度(12)运行
然后将结果传递给
triple
函数,返回的内容将传递给
double
,返回的内容将传递给
logE
,返回的内容将分配给
x


如果它不是这样设计的,那么做很多非常基本的事情将是非常乏味的。

为什么你认为这不可能?您可以发送任何您想要的作为参数,由函数决定如何处理该值。任何操作都是允许的。@IslamElshobokshy在哪里记录的?鉴于JS是一种基于规范的语言,您能提供源代码吗?谢谢。考虑到正如您所概述的那样存在例外情况,应该在某处记录了解为什么这在JS中有效。我知道这是可能的,但我不记得我是如何得知这确实是可能的,我在ES5规范中找不到它。另外,MDN中没有提到它,或者可能我找的地方不对。@obinwanehill-JavaScript规范可能很难阅读。:-)我已经更新了答案,列出了几个部分。非常感谢,谢谢。难以阅读可能是对事物的轻描淡写。为12岁儿童可以阅读的规范文档的创建定义一个PlainSpecs标准可能是有意义的。在那之前,经验主义一定会占统治地位。@Obinwanehill-嗯,我不同意经验主义,但那没关系。:-)你也会发现这很有用:谢谢。但你从哪里知道这是可以做到的?说明在哪里?我正在寻找此功能的源代码。我。。。不知道。我可能在学习Python的时候读过一本基础编程书,并且假设了应用于javascript的相同概念,因为函数调用在javascript中看起来很相似——结果证明我的假设是正确的。正如T.J.Crowder在上文中指出的那样,这种功能并不适用于任何地方。所以我只是想在规范中找到一些东西,确定这样的事情是可能的。