空字符串("")如何在JavaScript中调用函数?

4

我刚开始接触编码,有时候发现Javascript的语法很奇怪。虽然我知道许多调用函数的方法,但有一种方法引起了我的兴趣。

我看了一个开发者写的代码,可以推断出函数的作用,但不理解其中的原理。

通过在 () 中的函数定义旁边放��� ("") 来调用函数。

(function functionName() {console.log("Hello")}) ("")
// Hello

(functionName)("")
// evaluates the function

我尝试搜索但在这里找不到。如果有人能解释一下这里正在发生的事情(概念),我将不胜感激。如果这个问题是重复的,请告诉我。谢谢。


2
没有什么特别的事情发生。(functionName) 只是将函数求值,而 ("") 则调用该函数。在 JavaScript 中,函数可以作为值,并且可以在表达式中使用。 - Andrew Li
4
加法运算符 + 可以用于在数字表达式中进行加法运算,例如 (2 * 3) + (4 - 5) === 5。取反运算符 ! 可以用于对布尔表达式进行取反操作,例如 !(1 > 2) === true。函数调用可以使用括号 () 来调用一个函数表达式,例如 (Math.max)(10, 100) === 100。请注意,翻译过程中不能改变原文的意思。 - Ry-
啊哈...现在我感觉好蠢。这很清楚。唯一的问题是,该函数不接受任何参数。所以一个 "" 有点让我困惑。 - Paul
1
请注意,调用中传递的空字符串与问题并不严格相关,并且在函数中被忽略。即使没有它,它也能正常工作。 - Dave Newton
这里的参数设置为nothing,所以它不会在函数内执行任何操作,只会将空字符串写入控制台。然后,在函数内部,您必须使用(case和status)或(if和else)进行验证,这取决于您想要从函数中获得的结果以完成您的任务。对我来说,编程就是如何使用逻辑语句、内置函数和数据类型来完成您想要的任务。 - Osama
1个回答

2
您只需使用一个参数“”来调用函数 functionName 。
如果您像这样定义一个函数:
function functionName() {console.log("Hello")}

那么这两个语句是等价的:

functionName
(functionName)

当你输入时
(function functionName() {console.log("Hello")})("")

您好:

  • 定义一个匿名函数
    • 注意:由于它在声明时有括号,因此函数的作用域受到限制。该函数将不可用于程序的其余部分。这意味着functionName不会在下一行代码中被定义。
  • 评估该函数(通过在函数定义周围放置括号)
  • 调用该函数,带有单个参数""

该函数不接受参数,那么为什么我传递参数""给它时它可以工作?

Javascript允许调用比它们接受的更多/更少的参数的函数:

  • 如果有太多的参数(如我们的情况),则额外的参数将被丢弃。在这种情况下,""被丢弃。
  • 如果没有足够的参数,则它们是undefined

function test(a, b) { console.log(a + " " + b) }

test()              // undefined undefined
test("a")           // a undefined
test("a", "b")      // a b
test("a", "b", "c") // a b


2
我取消了我的反对并给您点了个赞,但需要注意的是 (function functionName() {console.log("Hello")})并未声明任何函数。相反,它定义了一个匿名函数,它的行为与声明的函数不同。 functionName这个名称不能在程序的其他部分中使用,因为该函数不是已声明的函数。 - Derek 朕會功夫
@Derek朕会功夫 我添加了另一个更正,谢谢。希望这次是正确的。 - Aurélien Gasser
那真的很有帮助。您能否解释一下为什么这里使用空字符串?该函数不接受任何参数,那么这个空字符串是什么意思呢?谢谢。 - Paul
1
@Paul 我添加了一个解释,为什么 "" 会被忽略。 - Aurélien Gasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接