この記事では主にjsの関数宣言と関数式の解析を紹介します。必要な方は参考にしてください
function say(){
console.log('函数声明');
}
var say = function(){
console.log('函数表达式');
}
say(); var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();
この結果を分析してみましょう:
1. Say 関数が初めて呼び出されたとき、関数はまだ定義されていません。 print out "function" では、"statement" の値はどうなるのでしょうか?その理由は、
JavaScriptインタプリタ内に変数宣言を昇格させる仕組みがあり、
関数宣言が最後に書かれていてもスコープの先頭に昇格するということです。まだ前に昇進します。
関数式で作成された関数は実行時に代入され、式の代入が完了するまで呼び出すことはできませんそのため、関数がまだ定義されていない場合でも、上図のように関数宣言が前面に昇格されています。コードは次と同等です:1.函数声明 函数表达式 函数表达式ログイン後にコピー
次の 2 つの比較から、「関数宣言のプロモーション」の概念をよりよく理解できます:
var say; //变量被提升,此时的值为undefined say();// 函数被提升,输出“函数声明” var say = function(){ console.log('函数表达式'); } say(); function say(){ console.log('函数声明'); } say();
var say; console.log(say); say(); function say(){ console.log('函数声明'); } 输出: f say(){ console.log('函数声明'); } 函数声明
var say; console.log(say); say(); var say = function(){ console.log('函数表达式'); } 输出: undefined Uncaught TypeError: say is not a function at <anonymous>:3:1
函数表达式
覆盖了函数声明
,因此输出了‘函数表达式’,然而到了第三次调用say函数时,此时打印的竟然还是‘函数表达式’??为什么后面的函数声明
没有覆盖前面的函数表达式
1. 関数宣言は JS 解析中にホイストされるため、同じスコープ内であればどこでも実行されます。関数宣言が定義されると、関数を呼び出すことができます。
関連する推奨事項:
以上がjsの関数宣言と関数式の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。