0

自己呼び出し型の匿名関数を使用してメソッドと変数をオブジェクトにアタッチする方法を試していたところ、理解できない動作に遭遇しました。

関数の前に変数を定義し、それを引数として渡します。メソッドは参照に添付されますが、外部で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

なんで?

4

4 に答える 4

3

オブジェクトは参照によって渡されるため、未定義の変数はそうではありません。

于 2013-06-18T10:50:44.027 に答える