with文の本質

1338 ワード

テストとdebugに合格した後、結論を出したのは個人の意見だけを代表する.
withの本質は,withのオブジェクトのすべてのkeyを局所変数として宣言する役割ドメインを構築することである.


var inner = '123';
var outer = {inner : 'hello world', another: 'hello with'};
window.obj = {outer: outer};

with(outer) {
	alert(inner);
	alert(another);
	alert(outer.inner);
	alert(window.obj.outer.inner);
	show();
}


function show() {
	alert(inner);

}

次のコードと同等


var inner = '123';
var outer = {inner : 'hello world', another: 'hello with'};
window.obj = {outer: outer};

(function(inner, another) {
	alert(inner);
	alert(another);
	alert(outer.inner);
	alert(window.obj.outer.inner);
	show();
})(outer.inner, outer.another);


function show() {
	alert(inner);

}


次のよくある問題を見てみると、一目瞭然です.

var root = { 
    branch: { 
        node: 1 
    } 
}; 

with(root.branch) { 
    root.branch = { 
        node: 0 
    }; 
    //   1,  ! 
    alert(node); 
} 
//   0,  ! 
alert(root.branch.node);