0

私はこのようなコードを持っています:(そしてjsfiddlehttp ://jsfiddle.net/k6zNm/3/

(function(){
    Marker = function(opts){
        var marker = this;
        marker.Version = "2012.Jul.06";
        marker.HelloWorld = function(){
            return marker.Version;
        }
    }
})();

window.mymarker = new Marker();
$("div#message").text(mymarker.HelloWorld());

コードは正常に機能します。しかし、私はそれ(function(){})();が閉鎖だと思います。なぜ私はそれにアクセスできますかMarker。それはグローバルな名前空間への汚染ではありませんか?

4

4 に答える 4

5

varを使用したことがないMarkerため、関数のスコープではなくグローバル変数になります。

于 2012-07-06T07:14:01.437 に答える
1

あなたのコードはクロージャーではありません。クロージャは以下のようなものです。関数を返す必要がありversionます。変数が返された関数スコープの外にあることに注意してください。

var Marker = (function(){
    var version = "2012.Jul.06";
    return function(opts){
        var marker = this;
        marker.Version = version;
        marker.HelloWorld = function(){
            return marker.Version;
        };
    };
})();

アクセスできるMarkerのは、コード内のグローバル変数だからです。

于 2012-07-06T07:18:47.120 に答える
0

マーカーの前に配置していないためvar、グローバルレベルで作成されます。

于 2012-07-06T07:15:01.173 に答える
0

クロージャーは単なる上位スコープです。例えば:

( function() {
    var i = 0;
    ( function() {
        // i is in the closure, the upper scope
    } () );
} () );

javascriptの唯一のスコープは関数スコープであることを忘れないでください。

(function(){})();即時に呼び出される関数式です。

しかし、ええ、あなたの例では、問題はあなたがを逃したことだけであり、グローバル変数varもそうです。Marker

于 2012-07-06T07:22:21.350 に答える