7. レキシカル環境のスコープ
(静的スコープ)
レキシカル環境のスコープ?静的スコープ
A {
var x;
}
B {
var x; // A内のxとは別物
C {
var y; // Cの内側からしか
見えない
}
}
function A() {
var x = "A"; // 他の関数からはアクセスできない
return x;
}
function B() {
var x = "B"; // 関数Aの変数xとは別もの
function C() {
var y = "C";
return x + y; // 関数Bの変数xにアクセスできる
}
return C();
}
alert(A()); // >>A
alert(B()); // >>BC
8. 動的スコープ
静的スコープではない?動的スコープ
var x = 123
A {
var x = 456
call C // 456と出力される
}
B {
call C // 123と出力される
}
C {
print x // 呼び出し元によって x の値が変わる
}
14. オブジェクトEnvironment
Record
? グローバルオブジェクトと
WithStatementにて使用される
? インターネットブラウザの場合
は、"window"がグローバルオブジェク
トとなる
15. 例:グローバルオブジェクト
(this, window)
var a = 10;
console.log(a); // 10
// "this" in the global context
//is the global object itself
console.log(this.a); // 10
// "window" is the reference to the
// global object in the browser environment
console.log(window.a); // 10
16. 例:WithStatement
var foo;
var baz;
with (document) {
//document.を省略できる
foo = getElementById('foo');
baz = getElementsById('baz');
}
17. 例:WithStatement
var a = 10;
var b = 20;
with ({a: 30}) {
console.log(a + b); // 50
}
console.log(a + b); // 30, restored
21. 10.1-10.4のまとめ
var a = 10;
function foo() {
var b = 20;
console.log(a);
}
with ({a: 20}) {
var bar = function () {
console.log(a);
};
foo();
bar();
}