Javascript 我们能定义“一个”吗;功能声明“;也作为一个;函数语句;?

Javascript 我们能定义“一个”吗;功能声明“;也作为一个;函数语句;?,javascript,Javascript,这个问题的产生考虑了函数声明和函数表达式 我们清楚地知道函数声明具有这种形式 function foo() { var a = 3; console.log( a ); } 而函数表达式可以有这种形式(看起来像是立即调用的函数表达式) 查看立即调用的函数表达式,我可以注意到第一个函数(函数声明中使用的函数)包装在parethesis中 现在,重点是:我知道分组操作符(最常见的称为“parethesis”())只能包含一个表达式。如果这是真的,我不能说函数声明也是一个函数语句(

这个问题的产生考虑了函数声明和函数表达式

我们清楚地知道函数声明具有这种形式

function foo() { 
    var a = 3;
    console.log( a );
}
而函数表达式可以有这种形式(看起来像是立即调用的函数表达式)

查看立即调用的函数表达式,我可以注意到第一个函数(函数声明中使用的函数)包装在parethesis中

现在,重点是:我知道分组操作符(最常见的称为“parethesis”())只能包含一个表达式。如果这是真的,我不能说函数声明也是一个函数语句(因为这就像说我在括号中包装了一个语句…)

所以,你能给我一些帮助吗,我有点困惑。 函数声明也是函数语句?如果是,括号中的函数是语句还是什么


我必须澄清,我不是在问函数声明和函数表达式之间的区别。如果我提到它们,它们的区别只是为了描述我的问题:一个“函数声明”也是一个“函数语句”?

表达式中的提升不会发生,但函数语句中的提升是发生的

在函数语句中,您可以在函数调用之前或之后在js文件的任何位置编写函数定义。JIT编译器将显示在编程文件的顶部

对于函数表达式,JIT编译器将不会执行与函数语句相同的操作,函数语句读取其发生的位置。如果您试图在函数定义之前访问它,它将显示类型错误

IIFE模式主要用于避免访问函数外的变量

callMe();//函数语句
函数callMe(){
返回console.log(“我是函数语句”);
}
//callMe2();//如果在定义表达式之前调用,则键入错误。
var callMe2=函数(){
返回console.log(“我是函数表达式”);
};
callMe2()//函数表达式调用
(功能(){
返回console.log(“我是生命”);

}());虽然函数表达式的语法与函数声明相同,但它们不是一回事

函数声明中使用的名称的范围不同于命名函数表达式。当你写作时:

function foo() { 
    var a = 3;
    console.log( a );
}
(function foo() { 
    var a = 3;
    console.log( a );
})
foo
的范围是封闭函数(如果是顶级函数,则为全局环境)

当你写作时:

function foo() { 
    var a = 3;
    console.log( a );
}
(function foo() { 
    var a = 3;
    console.log( a );
})
foo
的范围只是函数的主体


解析器根据上下文确定它是函数表达式还是声明。由于语句不能放在括号内,因此在语句周围加括号将使其成为表达式。

许多表达式也是语句。“函数表达式与函数语句非常相似,并且具有几乎相同的语法(有关详细信息,请参阅函数语句)。函数表达式和函数语句之间的主要区别在于函数名,函数名可以在函数表达式中省略,以创建匿名函数。函数表达式可以用作IIFE(立即调用的函数表达式),定义后立即运行。”-可能重复@zfrisch我不是说函数声明和函数表达式的区别!不要浪费时间怀疑可能的重复。。。只要读一下这个问题的标题,你就会发现我的问题是不同的。值得注意的是,被命名的生命的名字只存在于这个生命的内部,而不能在外部用这个名字来称呼。