JavaScript范围和对象

时间:2015-07-19 03:04:48

标签: javascript scope

将对象从一个函数传递到另一个函数是否需要特殊措施?我是面向对象的JavaScript的新手,所以如果有一个简单的修复,请原谅我。 以下是我遇到的问题的示例代码。

function foo {

    var x = 0;
    var y = 0;
    /* this is the JavaScript Object that is passed in
    cell = {
            left: {x: someInt, y: someInt},
            up: {x: someInt, y: someInt},
            right: {x: someInt, y: someInt},
            down: {x: someInt, y: someInt},
            x: someInt,
            y: someInt
        }
    */    

    this.turn = function(cell){
        console.log(cell);
        processNeighbors(cell);
        smartMove(x,y, cell);

    function smartMove(x,y,cell) {
         // make a smart decision
    }

    function processNeighbors(x, y, cell) {
        console.log(cell); // this is the line of the undefined error
        // process all neighbors
    }
}

我预计两个输出都是相同的,但是processNeighbors函数中的console.log()返回一个有效的响应,而bar函数返回一个'无法读取的属性“值”未定义的。

因此,当一个对象从一个函数传递到另一个函数时,它是否超出范围?我不会在任何函数中更改对象本身。

1 个答案:

答案 0 :(得分:2)

再次查看您的代码:

public class MapView extends SupportMapFragment 
                                    implements OnMapReadyCallback {

    private GoogleMap mMap;
    private Marker marker;


    public MapView() {
    }

    @Override
    public void onResume() {
        super.onResume();

        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {

        if (mMap == null) {

            getMapAsync(this);
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        mMap = googleMap;
        setUpMap();
    }

    private void setUpMap() {

        mMap.setMyLocationEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        mMap.getUiSettings().setMapToolbarEnabled(false);

    }


}

function processNeighbors(x, y, cell) { console.log(cell); // this is the line of the undefined error // process all neighbors } 在函数范围内创建var processNeighbors。 (第三个论点)

因此,当您的函数为单元格并且cellprocessNeighbors(cell);参数未定义时,请致电x y参数。

从参数中删除cell

cell

或使用正确的参数调用它:

function processNeighbors(x, y) {
    console.log(cell);
}

// or - if that was the intended way to call the function
function processNeighbors(cell) {
    console.log(cell);
}

我没有评论您的代码中的任何其他错误,因为我认为这些只是复制和放大粘贴错误。

作为一个非常简单的例子:

processNeighbors(x,y,cell);