javascript console.logでは、関数内では渡されないパラメーターの出力としてundefinedが提供されますが、関数内ではブラウザーが変数を明示的に宣言するため、関数外では未定義のエラーが発生します。例えば
console.log(x)
VM1533:1 Uncaught ReferenceErrorを与えます:xは定義されていませんが、
function test(x) {
console.log(x)
}
test();
未定義を与えます。これは、関数test()がブラウザによって次のように書き直されているためです。
function test(x) {
var x;
console.log(x)
}
もう一つの例 : -
var x =5 ;
function test(x) {
console.log(x)
}
test();
関数が次のようになるため、まだ未定義です
function test(x) {
var x;
console.log(x)
}
以下の例のアラートは未定義を与えます:-
var x =5;
function test() {
alert(x);
var x =10;
}
test();
上記の関数は次のようになります:-
function test() {
var x;
alert(x);
x =10;
}
関数内のjavascript変数のスコープは、ブロックレベルではなく、関数レベルのスコープです。例えば
function varScope() {
for(var i = 0; i < 10; i++){
for(var j = 0; j < 5; j++){}
console.log("j is "+j)
}
console.log("i is "+i);
}
varScope();
次のように出力されます:
j is 5
i is 10
再び関数は次のようになりました:-
function varScope() {
var i;
var j;
for(i = 0; i < 10; i++){
for(j = 0; j < 5; j++){}
console.log("j is "+j)
}
console.log("i is "+i);
}