当前位置: 首页 > 知识库问答 >
问题:

什么是中间值?

蓝逸仙
2023-03-14

今天我正好碰到了这个问题:未捕获的TypeError:(中间值)(...)不是一个函数

所以是的,在适当的地方放置分号之后,它不再抛出那个错误。然而,我从来不知道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

我知道它指的是中间的东西,但在本例中,我们有一个匿名函数,并且有一些方法可以确定函数是否是匿名的,因此错误消息可能更明确一些。

搜索js mozilla mdn,我发现了这个关于Array.from的页面,其中可以找到中间数组的概念:

更清楚地说,Array.from(obj, mapFn, thisArg)的结果与Array.from(obj). map(mapFn, thisArg)相同,只是它不创建中间数组。

但是除了这里和那里的一些信息,还不清楚什么是中间值。

这有官方定义吗?

共有1个答案

东博瀚
2023-03-14

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

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

这有官方定义吗?

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

6.2 ECMAScript规范类型

规范类型对应于算法中用于描述ECMAScript语言结构和ECMAScript语言类型语义的元值。规范类型包括引用、列表、完成、属性描述符、词汇环境、环境记录和数据块。规范类型值是规范人工制品,不一定对应于ECMAScript实现中的任何特定实体。规范类型值可用于描述ECMAScript表达式计算的中间结果,但此类值不能存储为对象的属性或ECMAScript语言变量的值。

(我的强调)

请注意,除了给函数起一个名称外,您的代码示例并不相同。其中一个尝试迭代值7。另一个尝试迭代未定义的值。这与来自V8的错误消息无关,但对SpiderMonkey来说确实如此。让我们将Apple与Apple进行比较,删除不相关项,并声明变量:

"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);
}
 类似资料:
  • 本文向大家介绍什么是中间件?相关面试题,主要包含被问及什么是中间件?时的应答技巧和注意事项,需要的朋友参考一下 中间件在这里是指注入到应用中处理请求和响应的组件。  

  • 用node做中间件的意义是什么?另外,怎么用node做中间件? 平时提到node,大家都会说node一般都是做中间件使用,我个人用node写过后台接口,但是不理解用它做中间件是干什么,你们在项目中有用node做中间件的实际业务吗?

  • 问题内容: 什么是PHP命名空间? 一般而言,命名空间是什么? 一个有例子的Layman答案会很棒。 问题答案: Namespacing对函数和类起作用,而作用域对变量起作用。它允许您在同一程序的不同部分中使用相同的函数或类名称,而不会引起名称冲突。 简单来说, 将名称空间视为一个人的姓氏 。如果有两个人名为“ John”,则可以使用他们的姓氏来区分他们。 场景 假设您编写了一个使用名为的函数的应

  •         在企业内,可按部门、组织、项目等多维度创建团队空间,搭建团队知识库,有效帮助团队成员进行企业文档、资料等知识的统一管理、共享与协作。企业管理员可以设置哪些人可以新建空间,拥有创建空间的员工则可以在团队空间里创建空间,设置空间的管理员和成员,并可为不同的成员或角色设置不同的权限,在实现文件高效共享的同时,保证文件安全,有效防止数据外流。

  • 问题内容: 我听说,在初始化之前进行访问和值会由于一个称为“ 临时死区” 的原因而导致错误。 什么是时间盲区,它与范围和起重有何关系,在什么情况下会遇到? 问题答案: 与以下内容有两个主要区别: 它们是块作用域的。 在声明之前访问a 会有结果;在声明之前访问a 或throws : 从这些示例中可以看出,声明(和,以相同的方式工作)可能不会被吊起,因为在赋值之前似乎并不存在。 这不是的情况下,how