フレームワークのIMビルドで「拡張ポイント」を実行する予定で、機能に追加できるように拡張子に「コア」を提供する方法を見つけましたが、コアオブジェクトを公開しませんこれがなぜ起こるか私はテスト(だけでなく、学習)している間に任意に操作(私はインターフェイスを提供することは良いアイデアである知っている)が、敷居することができ、私は疑問に思いました:予期しないクロージャの振る舞い
(function() {
var core = {'bar': 'foo'}
function getCore() {return core;}
window.kit = {
core: core,
getCore: getCore
}
}());
//initial check
console.log(kit.core)
console.log(kit.getCore());
//change the bar
kit.core.bar = 'baz';
//we will both see 'baz'
console.log(kit.core)
console.log(kit.getCore());
//null the core
kit.core = null;
//this time...
console.log(kit.core) //core is null on this one
console.log(kit.getCore()); //why is the core still there on this one?
また、 'kit.core'は参照またはポインタではありません。ローカル変数 'core'が値であるのと同じように値です – Raynos
Raynos:' kit.core'が 'core'ローカルオブジェクトを指しています。オブジェクトを変更すると、もう一方も変更されます。 –
@KarolyHorvath 'kit.core'の** contents **を変更すると、" getCore() "関数がその変更を見ます。しかし、 'kit.core'を何か新しいものを参照させるだけなら、(OPが発見されると)関係が壊れます。 – Pointy