【问题标题】:Name of a function is 'not avalable' inside the function itself函数名称在函数本身内部“不可用”
【发布时间】:2020-05-26 16:43:50
【问题描述】:

为什么函数的名称在 VS Code 调试控制台中“不可用”,即使我可以在作业中使用它?

【问题讨论】:

  • V8做了一些优化,如果你真的想要,也可以使用里面的console。
  • void function foo () ?我不认为这符合您的期望......它使函数成为函数表达式并丢弃值。
  • 呃,我不认为void function foo () 是有效的Javascript...
  • 有效,我会发布答案
  • 如果有效,那为什么JSlint会说Error : Unexpected 'void'.

标签: javascript node.js visual-studio-code vscode-debugger


【解决方案1】:

你需要阅读更多关于void operator的信息。

void 运算符计算给定的表达式,然后返回 undefined。

所以,就你而言,这意味着:

  • 取一个函数表达式function foo() { ... }
  • 评估它并且不返回任何内容

void function test() {
  console.log('boo!');
  // expected output: "boo!"
}();

try {
  test();
} catch (e) {
  console.log(e);
  // expected output: ReferenceError: test is not defined
}

如果你想让它工作,丢弃void

function foo() {
  const x = foo;
}

不过,我假设您想为函数指定返回类型。如果是这样,您不能在 JavaScript 中指定返回类型 - 它是一种具有动态类型的编程语言。

不过,使用 TypeScript,您可以编写:

function foo(): void {
  const x = foo;
}

【讨论】:

  • 但是相同的 sn-p 代码在 Chrome 的 DevTools 中工作,调试器看到函数名和局部变量一样。 (imgur.com/a/UoBUpvm)
  • 另外,使用 void 的技巧只是自调用函数语法的替代方案。我不在代码中的其他任何地方使用该名称。图片上的代码就是所有的代码。我可以很容易地定义一个“普通”函数,稍后调用它,但它的名称在其内部仍然不可用(对于 VS Code 调试器)。
  • 从未见过带有 void 语法的 IIFE,最好使用 (function foo() {})() 语法,而不是 void 运算符。
猜你喜欢
  • 2013-10-30
  • 2018-09-28
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
相关资源
最近更新 更多