with文の本質
1338 ワード
テストとdebugに合格した後、結論を出したのは個人の意見だけを代表する.
withの本質は,withのオブジェクトのすべてのkeyを局所変数として宣言する役割ドメインを構築することである.
次のコードと同等
次のよくある問題を見てみると、一目瞭然です.
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);