问题标签 [function-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
36 浏览

javascript - JavaScript 函数表达式

以下行:

只有 A() 调用该函数。def() 没有。为什么会这样?左边不是函数声明吗?

0 投票
0 回答
59 浏览

javascript - 为什么此摘录中的函数定义被解释为函数表达式

我正在从这里学习 JavaScript 立即调用函数表达式 (IIFE) 。

在这个 Ben 很好地解释了为什么直接调用函数不起作用:

所以我们只需要确保解析器将其解释为函数表达式而不是函数声明。

显而易见的方法是立即调用函数 - 将函数定义放在括号中(并因此强制解析器将其解释为函数表达式),然后再次将括号放在后面

然而,作者解释了其他需要表达式的地方,这会强制将函数定义解释为函数表达式而不是声明:

但是我不明白为什么下面的函数定义被强制解释为表达式:

所以下面实际上调用了该函数:

工作的JSFiddle

0 投票
1 回答
111 浏览

javascript - javascript返回函数表达式与在函数中声明变量

采取以下功能:

在没有关键字“var”的情况下,这会使 ya 成为局部变量,该函数会爬上作用域链以尝试查找 y 存在的位置。在没有任何预先存在的声明的情况下,它将 y 创建为全局变量。因此,我不需要在函数末尾添加 'return y' 以使 y 存在于它之外。

现在,如果我尝试做同样的事情,但将函数表达式分配给 y,它将无法正常工作。

我知道如何纠正它以使其工作:

但我不明白为什么我必须返回全局变量,因为它分配了一个函数表达式。有什么不同?

0 投票
2 回答
939 浏览

javascript - 使用命名函数表达式有什么意义?

我正在浏览这个关于函数声明和函数表达式之间区别的博客。

它给出了这两个例子。他们称第一个为“匿名函数表达式”,第二个为“命名函数表达式”。

我在 Chrome 的 JS 控制台中测试了这两个,我看到以下内容:

我的问题是:在第二个函数表达式声明中,“bar”的意义何在?一般来说,为什么要使用命名函数表达式?

0 投票
1 回答
461 浏览

javascript - 为什么我不能在带有 JQuery 的事件处理函数中将“函数声明”作为参数传递?

为什么使用函数声明不能​​正常工作,但使用函数表达式却可以正常工作?假设唯一的区别是浏览器如何将它们加载到执行上下文中。

使用函数表达式效果很好:

0 投票
2 回答
51 浏览

javascript - 用函数更新值,返回不工作

所以我正在使用一个函数来更新我的值,但我无法将它们取回。我看到值没有得到更新,但是有没有办法将它们保存为对函数返回的引用。

所以在这里我遇到了更改模式和 changeMode 函数表达式的问题。其中的模式应该引用 this.mode 然后我应该能够更新该值。

0 投票
4 回答
3395 浏览

javascript - JavaScript 匿名函数表达式 vs IIFE

遇到了一些在表达式中使用 IIFE 而不仅仅是普通函数的代码。

通常我会这样写:

IIFE的原因是什么?我唯一能想到的是,IIFE 可能custom_type在开始时只分配一次变量,而第二次可能会在每次引用变量时继续检查更新的类型。

0 投票
1 回答
63 浏览

javascript - “函数表达式”声明的约定

我是 js 新手,有时我很难习惯它的代码约定。所以我有一个问题,我应该如何声明函数表达式?看看我的代码,我是怎么做的,还是有更好的做法?

提前致谢。

0 投票
1 回答
183 浏览

javascript - 为什么我不能为具有相同名称的命名函数表达式中的变量赋值?

这是一个名为 的命名函数表达式test。在里面,我分配123给一个变量,也叫test. 然后test被记录。该函数在控制台中打印其主体,但不是123. 这种行为的原因是什么?

我对函数执行的解释在哪里失败?

  1. 函数执行开始:test是引用函数本身的局部变量
  2. 局部变量test被重新分配给数字123
  3. console.log(test)显示数字123
0 投票
1 回答
989 浏览

javascript - 模块模式中的函数声明与函数表达式

我刚刚了解了函数声明和函数表达式之间的区别。这让我想知道我是否在我的 AngularJS 代码中做对了。我正在遵循 John Papa 使用的模式,但现在它似乎与模块模式的典型 JS 方法不一致。John Papa 在他的控制器和服务中大量使用嵌套函数声明。这很糟糕吗?

有什么理由赞成这个:

对此:

我主要是一名 C# 开发人员,并且仍然习惯于 JavaScript 的所有细微差别。我更喜欢后一种方法,因为 IIFE 中的所有功能都是私有的,而顶部的显示模块模式实际上是公共部分。在 C# 类中,我总是在私有支持函数之前拥有我的公共属性和方法。但是,我意识到它在 JS 世界中可能没有那么简单。

使用后一种方法有什么隐患(如果有的话)?