函数声明
函数(富){ }
在整个
程序被
执行之前,提升函数将被提升,所以它在定义函数的整个范围(范围)中是可用的,甚至在函数定义之前调用它也没有问题。
在代码
运行之前
创建了
函数(富){ }
因为我打算写一篇
介绍行动范围的文章,这里没有详述。
功能性表达
对于函数声明,函数名是必需的,对于函数表达式,它是可选的。因此,出现了匿名函数表达式和命名函数表达式:
功能说明:功能函数名(){ }
功能说明:功能函数名(){ } {可选}
所以我知道,如果没有函数名,它必须是一个函数表达式,但是如何判断一个函数名的
情况呢
Javascript规定,如果整个函数体是表达式的一部分,那么它是一个函数表达式,否则它是函数声明:
Var(Fuc = foo){ }
让我们举几个更极端的表达式例子:
函数(富){ }!
真函数(富){ }
上面的语句只是用来区分函数表达式,一般不写这个,然后用比较的例子来看看效果:
匹配foo1(); / /匹配foo1未定义
Foo2(); / /作品因为Foo2被创建之前运行此代码
功能匹配foo1(){
警报('foo1作品);
};
功能Foo2(){
警报('foo2作品);
};
匿名函数的表达式
Var(富=函数){ };
上面的示例将匿名函数分配给变量富。
foo; / / 'undefined
foo(本); / /引发TypeError
Var(富=函数){ };
因为var是一个声明,所以变量是提升(提升),所以当程序被执行时,变量的调用被调用。
但是由于赋值语句在运行时唯一有效,所以变量的值是未定义的。
命名函数表达式
另一个要讨论的是命名函数的赋值。
函数条(){
(bar);
};
(酒吧); / / referenceerror
这里,命名函数条将变量赋给变量富,所以它在函数声明之外是不可见的,但它仍然可以在bar函数中被调用,这是因为Javascript
处理命名函数的机制,函数的名称在函数范围内总是有效的。