函数声明


函数(富){ }


在整个程序被执行之前,提升函数将被提升,所以它在定义函数的整个范围(范围)中是可用的,甚至在函数定义之前调用它也没有问题。


在代码运行之前创建了
函数(富){ }


因为我打算写一篇介绍行动范围的文章,这里没有详述。

功能性表达

对于函数声明,函数名是必需的,对于函数表达式,它是可选的。因此,出现了匿名函数表达式和命名函数表达式:

功能说明:功能函数名(){ }

功能说明:功能函数名(){ } {可选}

所以我知道,如果没有函数名,它必须是一个函数表达式,但是如何判断一个函数名的情况呢

Javascript规定,如果整个函数体是表达式的一部分,那么它是一个函数表达式,否则它是函数声明:


Var(Fuc = foo){ }


让我们举几个更极端的表达式例子:


函数(富){ }!
真函数(富){ }


上面的语句只是用来区分函数表达式,一般不写这个,然后用比较的例子来看看效果:


匹配foo1(); / /匹配foo1未定义
Foo2(); / /作品因为Foo2被创建之前运行此代码
功能匹配foo1(){
警报('foo1作品);
};
功能Foo2(){
警报('foo2作品);
};


匿名函数的表达式


Var(富=函数){ };


上面的示例将匿名函数分配给变量富。


foo; / / 'undefined
foo(本); / /引发TypeError
Var(富=函数){ };


因为var是一个声明,所以变量是提升(提升),所以当程序被执行时,变量的调用被调用。

但是由于赋值语句在运行时唯一有效,所以变量的值是未定义的。

命名函数表达式

另一个要讨论的是命名函数的赋值。


函数条(){
(bar);
};
(酒吧); / / referenceerror


这里,命名函数条将变量赋给变量富,所以它在函数声明之外是不可见的,但它仍然可以在bar函数中被调用,这是因为Javascript处理命名函数的机制,函数的名称在函数范围内总是有效的。