将函数语句转换为函数表达式的方法

Ways to convert a function statement to a function expression

本文关键字:函数 方法 表达式 转换 语句      更新时间:2023-09-26

我一直在学习IIFE(立即调用的函数表达式),并了解一般模式及其工作原理:

(function boo(y) {
  alert(y);
})(2); // call, not a grouping operator, 2

在本例中:

function body(y){
  alert(y);
}(2);

(2)只是一个分组操作符,它与调用函数语句无关,它与

相同:
function body(y) {
  alert(y);
}
(2);

我不明白这两个函数是如何创建函数表达式而不是函数语句的:

2, function () {
  alert('anonymous function);
}();
// OR 
!function () {
  alert('Hello World');
}();

这两个函数是如何作为表达式的?我可以看到它们是匿名函数,但我不明白它们是如何表达的?为什么要执行它们而不是抛出某种形式的语法错误?

首先,没有一个例子被称为"函数语句"。这是mozilla独有的语法区别,它看起来像函数声明,但出现在语句块中。

在本例中:

<>之前函数体(y) {警报(y);} (2);之前

(2)只是一个分组运算符,与调用无关函数语句…

是的,(2)将是一个分组操作符,因为函数声明是提升的,所以(2)并没有真正遵循它。

…与

相同<>之前函数体(y) {警报(y);}(2);之前

是,空格被忽略。

我不明白这两个函数是如何创建函数表达式而不是函数语句的:

<>之前2、function () {alert('匿名函数);} ();之前

//OR

<>之前function () {警报("Hello World");} ();之前

它们是表达式,因为存在需要对其操作数使用表达式的操作符。这样,函数就成为操作数,因此作为所需的表达式求值。

所以这仅仅是当程序被解析时,遇到!,它知道接下来的一定是一个表达式,所以当它计算之后的function () {...时,它认为这是一个有效的表达式,并将其解释为