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

javascript - 递归调用javascript函数

我可以像这样在变量中创建递归函数:

有了这个,functionHolder(3);将输出3 2 1 0. 假设我做了以下事情:

copyFunction(3);3 2 1 0如上输出。如果我然后更改functionHolder如下:

然后functionHolder(3);会给Stop counting!, 正如预期的那样。

copyFunction(3);现在给出3 Stop counting!它所指的functionHolder,而不是函数(它本身指向的)。在某些情况下这可能是可取的,但是有没有办法编写函数以便它调用自身而不是保存它的变量?

也就是说,是否可以更改线路functionHolder(counter-1);,以便3 2 1 0在我们调用时仍然执行所有这些步骤copyFunction(3);?我试过this(counter-1);了,但这给了我错误this is not a function

0 投票
3 回答
1858 浏览

javascript - 传递函数表达式以用作按钮的 onclick 处理程序

对于按钮,我需要在运行时设置此调用的函数以及该调用中使用的值。我可以这样做:

如果我尝试改为:

Firebug 给了我一个

“函数语句需要一个名称”

尽管如此,据我所知,我在这里使用了一个函数表达式。

0 投票
3 回答
142 浏览

javascript - 使用 Javascript 函数表达式的首选方法是什么?

我在调用 JavaScript 函数表达式时看到了这些不同的模式:

模式#1

模式#2

模式#3

在我的测试中,一切似乎都有效(至少在大多数当前浏览器中)。就我的“口味”而言,模式#3 更好,因为它比#1 更明确,并且它在实际调用它之前返回函数,而不是#2。

但是我在徘徊,如果有一个更喜欢或更正确的...

0 投票
2 回答
107 浏览

javascript - 确定 JavaScript 代码是否为表达式

我正在使用以下命名的函数isExpression来确定某些 JavaScript 代码是否是表达式:

它适用于除一个之外的所有测试用例 - 它错误地将 aFunctionDeclaration视为 aFunctionExpression并返回true而不是false. 有什么方法可以解决这个问题而无需编写解析器?

0 投票
1 回答
249 浏览

javascript - 所有函数表达式突然不被识别为函数

我有一个包含许多函数表达式的大量 javascript 文件。突然控制台给了我以下错误:

在 IE 中

在火狐中

这就是我调用函数的方式:

这是功能:

这发生在所有函数表达式上。如果我将一个更改为函数声明,它可以工作,但是在其中的一些其他函数表达式调用上会失败。有没有搞错?

0 投票
1 回答
3400 浏览

javascript - Javascript:将变量定义为调用相同函数的匿名函数

我被赋予了这样的功能:

现在,我有一个对象数组RecordArray

所以我想出了:

如您所见,WorkFunc实际上是从WorkFunc定义变量本身的匿名函数内部调用的。这在 ECMAScript/Javascript 中合法吗?(法律意味着它适用于所有符合标准的浏览器)

我的意思是,对我来说,它很像var c = c + 1;JavascriptC/C++/ObjC/Java中,它int c = c + 1;定义变量时引用了一个变量,所以要么它应该是非法的,要么它的行为应该是 undefined

但是,它似乎在一些浏览器上运行良好。


经过更多的研究和思考,我想出了其他解决方案。

  • 解决方案1:命名匿名函数(MyFunc),这样我就可以在里面使用它的名字(参考这里)。

代码:

  • 解决方案2:使用函数声明而不是函数表达式,这样它更像是一个递归函数(虽然不完全是)(参考这里)。

代码:

  • 解决方案3:将变量作为参数(NextStepFunc)传递,这样我就不需要在WorkFunc里面引用(这看起来很有趣)。

代码:

但我的问题仍然存在:我原来的解决方案合法吗?

0 投票
1 回答
199 浏览

javascript - 函数声明或函数表达式

我在块范围内定义函数时遇到了问题。考虑以下程序:

我希望这个程序能够提醒Merry Christmas!。但是在 Firefox 中是给了我以下内容ReferenceError

在 Opera 和 Chrome 上,它会像我预期的那样提醒问候语。

显然,Firefox 将块作用域内的函数视为FunctionExpressionOpera 和 Chrome 将其视为FunctionDeclaration.

我的问题是为什么 Firefox 的行为不同?哪种实现更合乎逻辑?哪一个符合标准?

我知道 JavaScript 中的声明被提升了,因此如果在同一范围内的两个或多个不同块中声明相同的函数,则会出现名称冲突。

但是,每次声明函数时重新声明函数不是更合乎逻辑,以便您可以执行以下操作:

除了解决我上面描述的块范围问题之外,我认为这将非常有用。

0 投票
2 回答
105 浏览

javascript - 严格模式下函数表达式中定义的变量的范围是什么?

据我了解,当一个变量被定义时,它会通过this.

如果本地没有设置范围,则最近的范围变为window.

然而,在严格模式下,本地范围设置为 undefined 而不是window作为 ECMAscript 5 规范的一部分,旨在限制对全局范围的滥用。


使用立即调用的函数表达式模式和严格模式来创建 jQuery 插件

本地范围(上下文)未创建(通过函数调用),因此设置为未定义。

如果本地作用域是未定义且未window.myVar定义的,那么变量的作用域是什么myVar,如何访问它?

0 投票
5 回答
27890 浏览

javascript - 为什么使用命名函数表达式?

我们有两种不同的方式在 JavaScript 中进行函数表达式:

命名函数表达式(NFE)

匿名函数表达式

并且它们都可以用 来调用boo();。我真的不明白为什么/何时应该使用匿名函数以及何时应该使用命名函数表达式。他们之间有什么区别?

0 投票
2 回答
88 浏览

javascript - 这是如何工作的!function(){console.log("hi")}()

我在javascript garden网站上读到了这篇文章。有人可以解释它是如何工作的吗?