近期一直在看汤姆大叔写的博文,他所介绍的知识点与理论较为清晰,命名函数表达式是我之前从没有去进行深究过的原理,虽然已多次在项目中使用javascript,但基础还是不都扎实,多看多思多想是一直必须坚持的。这篇文章作为学习笔记,很多知识点都是汤姆大叔所总结的,汤姆大叔博客链接在文末。
関数宣言:関数関数名(パラメーター:オプション){関数本体}
関数式:関数関数名(オプション)(パラメーター:オプション){関数本体}
関数名が宣言されていない
場合は、関数foo( ){}は、割り当て式の一部としての関数式です。関数foo(){}が関数本体またはプログラムの先頭に含まれている場合は、関数宣言です。
function foo(){
}//声明,因为是程序的一部分
var bar=function foo(){
};//表达式,赋值表达式
new function bar(){
};//表达式,new表达式
(function(){
//表达式,()是一个分组操作符,它的内部只能包含表达式
function bar(){
}//声明,函数体的一部分
})();
違い:
1。関数宣言は、式が解析および評価される前に解析および評価されます。注:関数宣言は条件ステートメントで使用できますが、環境が異なれば実行結果も異なる場合があります。関数式を使用することをお勧めします。
2.関数宣言は、プログラムまたは関数本体にのみ表示され、ブロックには表示されません(if、while、forステートメント)
。3。関数ステートメントは、変数の初期化中ではなく、実行時に宣言されます(関数式と同じ式を使用)。関数ステートメントの識別子が宣言されると、関数のスコープ全体で有効になります。
// 此刻,foo还没用声明
typeof foo; // "undefined"
if (true) {
// 进入这里以后,foo就被声明在整个作用域内了
function foo(){
return 1; }
}
else {
// 从来不会走到这里,所以这里的foo也不会被声明
function foo(){
return 2; }
}
typeof foo; // "function"