You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中verifiqueSe嵌套函数工作原理及关联逻辑咨询

关于verifiqueSe函数的疑问解答

先贴出相关代码:

const somaHorasExtras = (salario, valorHorasExtras) => salario + valorHorasExtras;

const calculaDescontos = (salario, descontos) => salario - descontos;

const verifiqueSe = (valor) => {
  const assercoes = {
    ehExatamenteIgualA(esperado) {
      if (valor !== esperado) {
        // eslint-disable-next-line no-throw-literal
        throw {};
      }
    },
  };
  return assercoes;
};

const teste = (titulo, funcaoDeTeste) => {
  try {
    funcaoDeTeste();
    console.log(`${titulo} passou!`);
  } catch {
    console.error(`${titulo} não passou!!!`);
  }
};

teste('somaHorasExtras', () => {
  const esperado = 2500;
  const retornado = somaHorasExtras(2000, 500);

  verifiqueSe(retornado).ehExatamenteIgualA(esperado);
});

teste('calculaDesconto', () => {
  const esperado = 2300;
  const retornado = calculaDescontos(2500, 200);

  verifiqueSe(retornado).ehExatamenteIgualA(esperado);
});

1. verifiqueSe函数的运作方式

verifiqueSe是一个接收单个参数valor的函数,这个参数就是你要验证的实际值(比如测试里的retornado,也就是目标函数执行后返回的结果)。

函数内部会创建一个名为assercoes的对象,随后将这个对象返回。它的核心作用是暂存待验证的值,同时提供对应的验证方法,让你能以链式调用的方式编写验证逻辑,让代码更易读。

2. 和ehExatamenteIgualA的配合逻辑

这是JavaScript闭包特性的典型应用:

  • 当你调用verifiqueSe(retornado)时,retornado会被赋值给函数参数valor,这个valor会被内部的ehExatamenteIgualA函数“记住”——哪怕verifiqueSe已经执行完毕并返回,ehExatamenteIgualA依然能访问到这个值。
  • 接着调用.ehExatamenteIgualA(esperado)时,这个方法会拿之前暂存的valor(实际返回值)和传入的esperado(预期值)做全等比较。
  • 如果两个值不相等,就抛出一个空对象;如果相等则什么都不做。抛出的错误会被外层teste函数的catch块捕获,进而打印测试不通过的提示;没报错的话就会执行try块里的成功提示。

3. 返回的assercoes是什么

assercoes是一个封装了断言方法的对象,这里面只定义了ehExatamenteIgualA这一个验证方法。它的作用是把验证逻辑打包起来,让代码的语义更清晰——比如verifiqueSe(retornado).ehExatamenteIgualA(esperado)读起来就像“验证这个返回值是否完全等于预期值”,比直接写if(retornado !== esperado) throw {}要直观得多。

如果后续需要更多验证逻辑(比如判断是否大于某个值、是否为数组等),只需要在assercoes对象里添加对应方法即可。

内容的提问来源于stack exchange,提问作者Bruno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:36:25