问题标签 [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 投票
3 回答
1255 浏览

javascript - 在 JavaScript 中,为什么我不能立即调用函数声明?

只有函数表达式可以立即调用:

但不是函数声明?这是因为函数声明被提升并且已经立即执行了吗?

编辑:我引用的资源

http://benalman.com/news/2010/11/immediately-invoked-function-expression/

http://markdalgleish.com/presentations/gettingclosure/

0 投票
1 回答
40 浏览

javascript - 双重命名的方法会产生副作用吗?

我最近遇到了几个定义对象方法的库,如下所示:

有人可以向我解释双重命名的用途吗?我理解 和 之间的区别function someName(){};var someName = function(){};但这种设置对我来说没有多大意义。

0 投票
3 回答
59 浏览

javascript - 为什么命名的javascript函数仍然存在?

这是对您在 john resig 的 Learning Advanced Javascript 应用程序中找到的内容的改编。

人们期望o.x(5)应该抛出一个错误,但它会执行。为什么?

0 投票
1 回答
73 浏览

javascript - Firefox上的函数表达式 - 不是预期的结果

上面的代码是函数表达式的示例,在 Firefox 28 中返回 1,而在 Chrome 中返回 2(预期结果)。为什么Firefox给出错误的结果?

0 投票
2 回答
51 浏览

javascript - 函数内的javascript函数表达式

下面的工作 javascript 片段不包括验证,因为它仅用于学习目的。但是,我不了解在 buildBoundDetector() 函数中定义变量“isBetween”之后的事件流。为什么通过变量'f'传递一个数字有效?

0 投票
1 回答
192 浏览

javascript - Javascript 中的错误/警告:循环内的函数

我是 JavaScript 新手,正在从在线教程中学习它。当前表达式是关于函数表达式的使用,特别是 - 从函数内部返回函数表达式。

这是代码:

我正在使用 MS Visual Studio Code,在代码结束时,我收到一个错误和一个警告,即使代码成功运行,并且我根据wantsRide变量获得所需的结果。但是,我无法理解错误和警告的原因。

在屏幕底部(下面的屏幕截图),我得到 1 个十字和 1 个感叹号图标,我认为这意味着 1 个错误和 1 个警告。

在此处输入图像描述

但是当我点击它时,我会在栏的顶部看到一个突出显示的区域,上面写着! Function inside loop这些行被突出显示:

在此处输入图像描述

这里似乎有什么问题?我知道它是for循环内的函数表达式,但为什么会生成警告?是不是因为该if(pick==allRides[i][0])语句可能永远不会为真,所以函数表达式永远不会被执行?

0 投票
1 回答
101 浏览

javascript - 存储在 JavaScript 中的命名函数表达式中标识符的不可变绑定记录在哪里?

最近我遇到了一些关于命名函数表达式(NFE)的有趣事实。我知道一个 NFE 的函数名可以在函数体内访问,这样递归更方便,节省了我们arguments.callee的 . 并且函数名在函数体之外是不可用的。例如,

这是一个有据可查的功能,kangax 有一篇关于 NFE 的精彩帖子并在那里提到了这种现象。最让我吃惊的是,一个 NFE 的函数名不能与函数体中的其他值重新关联。例如,

在上面的例子中,我们尝试foo用另一个值重新绑定标识符5。但这失败了!而我翻到 ES5 Spec 发现在创建 NFE 时会创建一个不可变的绑定记录并添加到词法环境的环境记录中。

问题是,当 NFE 在函数体内引用它自己的函数名时,该名称被解析为自由变量。在上面的例子中,foo在 NFE 内部被引用,但它既不是这个函数的形参也不是局部变量。所以它是一个自由变量,它的绑定记录可以通过 NFE 的 [[scope]] 属性来解析。

所以考虑一下,如果我们在外部范围内有另一个同名的标识符,似乎会有一些冲突。例如,

当我们执行 NFE 时,自由变量 foo被解析为与其关联的函数。但是当控件退出 NFE 上下文时,foo被解析为外部作用域中的局部变量。

所以我的问题如下:

  1. 函数名的不可变绑定记录存放在哪里?
  2. 在 NFE 中解析时,函数名称为何foo超过?var foo = 1它们的绑定记录是否存储在相同的词法环境中?如果是这样,怎么做?
  3. foo函数名内部可访问但外部不可见的现象背后是什么?

有人可以通过 ES5 规范对此有所了解吗?我在网上找不到太多讨论。

0 投票
1 回答
21 浏览

javascript - 调用外部名称的函数表达式

我在javascript中有这样的函数表达式:

我如何从其他地方调用它,比如从另一个函数中调用它。

我试过这个。

并在其他一些函数中调用它,比如

或者

或者

但它不起作用。我怎样才能解决这个问题?

0 投票
1 回答
69 浏览

javascript - JavaScript:将函数声明更改为旧代码中的表达式

我正忙于重构遗留代码。在这里,我可以看到 for 函数同时使用了声明和表达式。我知道声明被提升,表达式在时间逐步执行时起作用。也有,NFE但我不能使用它们,因为IE8. 所以,我的问题是:

我可以将所有函数声明替换为表达式吗?这种更换是否有任何明显或可能的问题?我想使用表达式,在文件顶部定义它们。

0 投票
3 回答
198 浏览

javascript - Javascript私有方法:函数表达式与函数声明

在 javascript 中创建私有方法(各种)的常用方法是:

上面的示例也可以使用函数声明而不是函数表达式来完成:

这两种声明私有方法的方式有什么不同?(一个是表达式,另一个是声明)

例如,表达式显然会在每次调用构造函数时生成一个新函数。函数声明也会发生这种情况,还是因为函数声明是在解析时评估的,所以它只被评估一次?(与在执行时评估的函数表达式相反,你明白了。)

编辑:我知道 javascript 并不是真的的私有方法。我松散地使用这个词。

编辑:不是var functionName = function() {} vs function functionName() {}的重复,如果有任何关于 javascript 'classes' 的函数表达式与函数声明的重复。我的问题不是一般的函数表达式和函数声明之间的区别,而是它们在javascript“类”中的“私有成员”方面的区别。