JavaScript作用域不分配变量

时间:2013-03-03 00:12:06

标签: javascript scoping

我正在用JS编写一个函数,但我对变量标记有疑问。

代码:

    function piano(numero, link) {

            var marker;
            this.marker = marker;

            var immagine = loadImage(link, marker);
            this.immagine = immagine


            function createMarker() {

                    return new RichMarker({

                           ....

                    });
            }

            function loadImage(link, marker) {

                    var immagine = new Image();

                    immagine.src = link;

                    immagine.onload = function() {
                            marker = createMarker();  
                    };  

                    return immagine;
             }

             ....

初始化变量 immagine ,调用函数 loadImage 来加载图片。

在这个函数中,它是代码:

                    immagine.onload = function() {
                            marker = createMarker();  
                    };  

在加载图像后必须分配标记

当我尝试访问标记时,在加载图片后,它总是会导致 undefined ;我确信已经创建了 RichMarker

我不明白为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

JavaScript变量会存储对象的引用,但您无法共享引用NumberStringundefined的引用。如果marker不是数组或对象,那么markerthis.marker将在以后修改时不会是同一个对象(将其视为复制值,而不是分配参考)。

而是尝试确定this对象的范围,以便稍后再次引用该对象

function piano(numero, link) {
    var self = this;
    this.immagine = loadImage(link);


    function createMarker() {
        return new RichMarker({
            //...
        });
    }

    function loadImage(link) {
        var immagine = new Image();
        immagine.src = link;

        immagine.onload = function() {
            //use the scoped version of 'this'
            self.marker = createMarker();  
        };  

        return immagine;
     }

     //...
 }