JavaScript 変数の「所有権を取得」する簡単で簡単な方法が必要でした。例えば:
function takeown( obj ) {
obj = obj;
}
takeown( window.undefined );
それで、これはに設定さwindow.undefined
れwindow.undefined
ますか?
n00bの質問で申し訳ありませんが、私はjavascriptのn00bです。
JavaScript 変数の「所有権を取得」する簡単で簡単な方法が必要でした。例えば:
function takeown( obj ) {
obj = obj;
}
takeown( window.undefined );
それで、これはに設定さwindow.undefined
れwindow.undefined
ますか?
n00bの質問で申し訳ありませんが、私はjavascriptのn00bです。
これは何もしません。Javascript 変数は、メモリ内のオブジェクトへの参照です。関数は参照を取り、以前に参照していたのと同じオブジェクトを指し、(コメントに記載されているように) 何もしません。
window.undefined を再定義したい場合は、新しい値を設定するだけで実行できます (これはお勧めできません)。Javascript は、期待どおりにグローバル変数を保護しません。組み込み値のほとんどは、再定義または拡張できます。
コメントで、実際に必要なのは変数が将来変更されないようにする方法であることを明確にしたので、それを行う最良の方法はクロージャーを使用することです。
クロージャーは、javascript のスコープ処理を利用して、プライベート変数をシミュレートし、スコープを保護する方法です。具体的には、この場合、次のようなことができます。
function createConstant(){
var const = 3;
return function(){
return const;
}
}
これにより、不変に 3 を返す関数が作成されます。そう :
createConstant()
は常に 3 を返します (技術的には、新しい関数を参照するように create 定数を再定義できますが、これについては何もできないレベルがあります。
あなたがしようとしているのは、グローバル変数をオーバーライドすることです (なぜあなたがそれをやろうとしているのかわかりません)。これは次のように行われます:
window.Counter = 'whatever';
// so
window.Counter // => 'whatever'
あなたの関数は、変数を同じ変数に割り当てます...何もしません。しかし、undefinedは javascript 1.8.5 ( link ) 以降書き込み可能ではありません。他のグローバル変数は書き込み可能だと思います。
乾杯、