Javascript 什么类型的';返回';关键词?
我们可以选择在JavaScript函数中使用语句。这是一个关键词。但是Javascript 什么类型的';返回';关键词?,javascript,return,keyword,Javascript,Return,Keyword,我们可以选择在JavaScript函数中使用语句。这是一个关键词。但是返回本身的实际类型是什么呢。事实上,看到这个例子,我很困惑: function add(a, b) { return ( console.log(a + b), console.log(arguments) ); } add(2, 2); 输出: 4 [2, 2] 因此,我们可以将逗号分隔的表达式传递到return语句中。这是一个函数吗 从这里开始,我们可以猜测JavaScript中的每个关键字最
返回本身的实际类型是什么呢。事实上,看到这个例子,我很困惑:
function add(a, b) {
return (
console.log(a + b),
console.log(arguments)
);
}
add(2, 2);
输出:
4
[2, 2]
因此,我们可以将逗号分隔的表达式传递到return
语句中。这是一个函数吗
从这里开始,我们可以猜测JavaScript中的每个关键字最终都是一个函数吗
我写了一个小博客作为这次讨论的要点。你可能想检查一下
但“回报”本身的实际类型是什么
它没有类型,也不是值
尝试返回类型
将给您意外的令牌返回
因此,我们可以将逗号分隔的表达式传递到return语句中。这是一个函数吗
不,虽然括号可以用来调用函数,但在这里它们是一个包含两个表达式的函数,用一个分隔
更有用的示范是:
function add(a, b) {
return (
(a + b),
(a - b)
);
}
console.log(add(2, 2));
它输出0
,因为a+b
的结果被忽略(它位于逗号运算符的左侧),并返回a-b
。测试返回括号中的值时会发生什么:
function foo() {
return (1, 2);
}
console.log(foo());
给出答案2
,因此以逗号分隔的值列表的计算结果似乎是列表中的最后一个元素
实际上,括号在这里是不相关的,它们是分组操作,而不是表示函数调用。然而,可能令人惊讶的是,逗号在这里是合法的。我在这里发现了一篇有趣的关于逗号如何处理的博文:
返回
不是一个函数。它是它发生的函数的延续
想想这句话alert(2*foo(bar))代码>其中foo
是函数名。当您对它进行评估时,您会发现必须将语句的其余部分暂时放在一边,以便集中精力评估foo(bar)
。您可以将您放在一边的部分可视化为类似于alert(2*)
,并填充一个空白。当您知道foo(bar)
的值是多少时,您可以再次选择它
你所搁置的是继续调用foo(bar)
调用return
为该延续提供一个值
当您在foo
中计算一个函数时,foo
的其余部分等待该函数减小为一个值,然后foo
再次拾取。您仍然有一个评估foo(bar)
的目标,它只是暂停了
当您在foo
内部计算return
时,foo
的任何部分都不会等待值return
不会在您使用它的foo
中的某个位置降低到某个值。相反,它会导致整个调用foo(bar)
减少到一个值,并且目标“evaluatefoo(bar)
”被视为已完成并被吹走
当你刚开始编程时,人们通常不会告诉你关于续集的事情。他们认为这是一个高级的话题,只是因为人们最终会用延续来做一些非常高级的事情。但事实是,每次调用函数时,都会一直使用它们 返回
这里是一条红鲱鱼。可能有以下变化:
function add(a, b) {
return (
console.log(a + b),
console.log(arguments)
);
}
console.log(add(2, 2));
哪个输出作为最后一行
undefined
因为函数实际上不返回任何内容。(如果有第二个控制台.log
,它将返回该控制台的返回值)
实际上,代码与
function add(a, b) {
console.log(a + b);
console.log(arguments);
}
console.log(add(2, 2));
我有点震惊,这里没有人直接提到:
12.9返回语句语法ReturnStatement:return;返回[no LineTerminator here]表达式
语义
如果ECMAScript程序
包含不在FunctionBody中的返回语句。A.
return语句导致函数停止执行并返回
将值传递给调用方。如果省略表达式,则返回值为
未定义。否则,返回值为表达式的值
ReturnStatement的评估如下所示:
Let lref be the result of evaluating Expression.
Call GetValue(lref).
Let rref be the result of evaluating AssignmentExpression.
Return GetValue(rref).
如果表达式不存在,则返回(返回,未定义,为空)
。
让exprRef
作为表达式求值的结果。
Return(Return,GetValue(exprRef),空)
因此,由于规范的原因,您的示例如下:
return(GetValue(exprRef))
在哪里
exprRef=console.log(a+b),console.log(参数)
根据
语义
生产表达式:表达式,AssignmentExpression为
评价如下:
Let lref be the result of evaluating Expression.
Call GetValue(lref).
Let rref be the result of evaluating AssignmentExpression.
Return GetValue(rref).
…表示将对每个表达式求值,直到逗号列表中的最后一项成为赋值表达式为止。因此,您的代码返回(console.log(a+b)、console.log(arguments))
将
1.)打印a+b的结果
2.)没有什么要执行的了,所以执行下一个表达式
3.)打印参数
,因为console.log()
没有指定
返回语句
4.)计算为未定义
5.)然后返回给调用方
因此正确的答案是,return
没有类型,它只返回某个表达式的结果
关于下一个问题:
因此,我们可以将逗号分隔的表达式传递到return语句中。
这是一个函数吗
不可以。JavaScript中的逗号是一个运算符,定义为允许您将多个表达式组合到一行中,并且由规范定义为返回列表中最后一个表达式的计算表达式
你还是不相信我
<script>
alert(foo());
function foo(){
var foo = undefined + undefined;
console.log(foo);
return undefined, console.log(1), 4;
}
</script>
警报(foo());
函数foo(){