gpt4 book ai didi

javascript - 什么是中间值?

转载 作者:可可西里 更新时间:2023-11-01 02:39:10 25 4
gpt4 key购买 nike

今天我遇到了这个问题:Uncaught TypeError: (intermediate value)(...) is not a function

是的,在适当的地方放置分号后,它不再抛出该错误。然而,我从来不知道JavaScript中有这样一个概念(中间值)

显然,您可以使用这段代码生成该错误的类似变体:

[myFunc] = function(someVar){

console.log(someVar);
return 7;
}();

//error thrown: (intermediate value) is not a function or its return value is not iterable

如果你给这个函数命名,它就不再是中间:

function hi(){return undefined}

[a] = hi();

// error thrown: hi is not a function or its return value is not iterable

我知道它指的是中间的东西,但在这种情况下我们有一个匿名函数,并且 there are ways to determine if a function is anonymous ,因此错误消息可能更明确一些。

正在搜索 the js mozilla mdn我找到了 this page讲的是Array.from,其中可以找到“中间数组”的概念:

More clearly, Array.from(obj, mapFn, thisArg) has the same result as Array.from(obj).map(mapFn, thisArg), except that it does not create an intermediate array.

但是除了零散的信息之外,不清楚什么是中间值

这个有官方定义吗?

最佳答案

“中间值”只是表达式内部产生的一个值,它不是表达式的最终值。在 a = (b * c) + d 中,b * c 的结果是右侧表达式中的中间值。

是的,在这种特定情况下,错误消息可能会说“(匿名函数)不是函数或其返回值不可迭代”。不过,并非所有中间值都是匿名函数。 V8 的实现者只是选择使用通用错误消息。 (SpiderMonkey [在 Firefox 中] 使用相同的术语,但消息不同。)

Is there an official definition to this?

规范使用术语“中间结果”here ,与“中间值”(在我看来)的含义基本相同:

6.2 ECMAScript Specification Types

A specification type corresponds to meta-values that are used within algorithms to describe the semantics of ECMAScript language constructs and ECMAScript language types. The specification types include Reference, List, Completion, Property Descriptor, Lexical Environment, Environment Record, and Data Block. Specification type values are specification artefacts that do not necessarily correspond to any specific entity within an ECMAScript implementation. Specification type values may be used to describe intermediate results of ECMAScript expression evaluation but such values cannot be stored as properties of objects or values of ECMAScript language variables.

(我的重点)


请注意,除了为函数命名外,您的代码示例并不相同。其中之一尝试迭代值 7。另一个尝试迭代值 undefined。 V8 的错误消息无关紧要,但它对 SpiderMonkey 有影响。让我们比较苹果与苹果,删除不相关的内容,并声明我们的变量:

"use strict";

var myFunc;

try {
[myFunc] = function(){
return 7;
}();
} catch (e) {
console.error(e.message);
}

try {
[myFunc] = function hi(){
return 7;
}();
} catch (e) {
console.error(e.message);
}

try {
function hi(){
return 7;
}
[myFunc] = hi();
} catch (e) {
console.error(e.message);
}

关于javascript - 什么是中间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50329128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com