JavaScript関数宣言と変数宣言を区別します.

879 ワード

今日はまた問題が発生しました.私はJSとの基礎的な勝負を始めました.

var getName = function(){alert(1)};
function getName(){alert(2)};
getName();// 1
or

function getName(){alert(2)};
var getName = function(){alert(1)};
 
getName();// 1
なぜ私は声明の順序を変えましたか?それともvar形式で宣言した関数の値を出力しますか?
「えっと、変数が上がるんですか?」という答えがありましたが、最初の理解は変数が上がっても、最初の場合はこうなるべきです.

var getName;
getName = function(){alert(1)};
function getName(){alert(2)};
最後に2を出力するべきですね.
しかし、var声明だけが前もって、function fn(){}という形式で宣言した関数は、作用域の最上部に引き上げられ、また変数の向上につながるということです.具体的には次の例を見てください.

fn();//Uncaught TypeError: fn is not a function
var fn = function(){console.log(1)};
but

fn();//2
var fn = function(){console.log(1)};
function fn(){console.log(2)}
関数アップのより凶を説明するに十分です.