1
var c = 1;

function myFunction(){
    c = 2;
    var c = 4;
    console.log(c);
}

console.log(c);
myFunction();
console.log(c);

最後の console.log が 1 を出力するのはなぜですか? これが私の脳内でどのように機能するかを示しています。

var c = 1; // create global variable called 'c'

function myFunction(){
    c = 2; // assign value of global 'c' to 2
    var c = 4; // create a new variable called 'c' which has a new address in memory (right?)  with a value of 4
    console.log(c); // log the newly created 'c' variable (which has the value of 4)
}

console.log(c); //log the global c
myFunction(); //log the internal c
console.log(c); //log the updated global c
4

1 に答える 1

3

console.log が実行されるスコープでは、グローバル変数のみが存在します。そして、関数はグローバル変数に決して触れません。

詳細:

var c = 1; // create global variable called 'c'

function myFunction(){
    // the global is unavailable here, as you declared a local c.
    // Its declaration is hoisted to the top of the function, so
    // c exists here, and its value is undefined.
    c = 2; // assign value of local 'c' to 2
    var c = 4; // change local c to 4
    console.log(c); // log local c (4)
}

console.log(c); //log the global c
myFunction(); //log the internal c
console.log(c); //log the global c (which never changed)

上記の巻き上げにより、関数はコードが次のように動作します。

function myFunction(){
    var c; // declares a local c that shadows the global one
    c = 2;
    c = 4;
    console.log(c);
}

巻き上げに関するいくつかの参考資料

于 2013-07-15T19:42:12.743 に答える