自己呼び出し型の匿名関数を使用してメソッドと変数をオブジェクトにアタッチする方法を試していたところ、理解できない動作に遭遇しました。
関数の前に変数を定義し、それを引数として渡します。メソッドは参照に添付されますが、外部でname
は未定義のままです。
var name;
(function(exports) {
exports = {};
exports.method = function() {
// do stuff
};
})(name);
alert(name === undefined); // true
しかし、変数が関数の外部で初期化されると、期待どおりに正しいプロパティがアタッチされます。
var name2 = {};
(function(exports) {
exports.method = function() {
// do stuff
};
})(name2);
alert(name2 === undefined); // false
alert(name2.method); // method is defined
なんで?