当前位置: 首页 > 面试题库 >

像“ var foo = function bar()…”这样的Javascript函数吗?

漆雕宏浚
2023-03-14
问题内容

代码是这样的(语法可能看起来很奇怪,但据我所知,它没有任何问题。还是存在?)

var add=function addNums(a, b) {                     
   return a+b;
 }                     
 alert("add: "+ add(2,3));           // produces 5
 alert("addNums: "+addNums(2,3));        // should also produce 5

addNums()声明为一个函数。因此,当我将参数传递给它时,它也应该返回结果。

那么,为什么我没有得到第二个警告框?


问题答案:

您会看到一个命名函数表达式(NFE)。

匿名函数表达式是您将没有名称的函数分配给变量1的地方:

var add = function () {
  console.log("I have no own name.");
}

命名函数表达式是您将命名函数分配给变量的地方(惊奇!):

var add = function addNums() {
  console.log("My name is addNums, but only I will know.");
}

函数名称仅在函数本身内可用。这使您无需知道函数的“外部名称”即可使用递归-即使不必首先设置一个函数(请考虑使用回调函数)。

您选择的名称将 掩盖
现有名称,因此,如果在其他addNums位置定义了其他名称,则该名称将不会被覆盖。这意味着您可以使用自己喜欢的任何名称,而不必担心范围界定或破坏任何内容。

过去,您可能曾经arguments.callee在不知道函数名称的情况下在其内部引用函数。但是从JavaScript2中删除了对此的支持,因此,如今,NFE是正确的方法

1不必将其分配给变量,它只是作为示例将其与普通函数声明区分开来。可能是JS需要表达式的任何其他上下文(例如,函数参数)。

2如果您使用严格模式并尝试使用,则会收到错误消息arguments.callee



 类似资料:
  • 问题内容: 我想用胶水线加入。有这个功能吗? 问题答案: 从 Java8 开始,可以使用。 产生: 否则,Apache CommonsLang具有一个类,该类具有将数组连接在一起以构成的功能。 例如: 生成以下内容:

  • 问题内容: 在MySQL上,是否存在POSTGRESQL中的“ unnest”之类的功能? 查询(PSQL): 结果(如表所示): 问题答案: 简短答案 对的,这是可能的。从技术角度来看,您可以通过一个查询来实现。但是问题是-最有可能的是,您正在尝试将一些逻辑从应用程序传递到数据存储。数据存储旨在 存储 数据,而不是表示/格式化数据,或者甚至对其应用某些逻辑。 是的,MySQL没有数组数据类型,但

  • 问题内容: 我需要像这样用javascript制作字典 我不记得确切的符号了,但是有点像: javascript中有这样的事情吗? 问题答案: 这是一篇旧文章,但我认为无论如何我都应该提供一个图解的答案。 使用javascript的对象表示法。像这样: 并访问值: 或者您可以使用javascript文字对象表示法,其中键不需要用引号引起来:

  • 很简单的一个根据条件判断结果的函数,传进来三个值;三个条件是互相依赖的,通过switch来判断返回出结果 其中参数z传进来后,里面大约有20种判断条件;x与y也会有好几个判断条件 如果按照以上我的写法,可以整个函数会写很长;有什么其他更好的写法吗?

  • 请问这样的构造函数如何实现?

  • 问题内容: 我只是看了一下新的Java 8 函数包,想知道为什么会有类似的接口 … 这也 不会 延长。这是否意味着我将无法通过要求a的地方,反之亦然?这同样适用于,和。 我看到的优点是,不必在返回原语时进行检查,但是缺点列表似乎要长得多 问题答案: 此问题与以下事实有关:Java中的原始类型未统一为可替代,并且具有通用类型擦除。 使用代替而不是最后一个满足时有两个缺点: 每个返回的内容都用盒装-意