将变量传递给函数(范围问题)

时间:2010-11-21 10:58:43

标签: javascript scope

我正在尝试将 p 的值传递给警报功能 - 不幸的是,它刚刚出现未定义。我认为问题是因为当该函数被调用时 p 不再存在。如何将 p 传递给该函数并使其保留值?

function B(p,u) {
    var foo = {};
    foo[u] = function(p) {
        alert('visit internal page '+p);
    };
    $.router(foo);
}

B("about", "!/about");

2 个答案:

答案 0 :(得分:3)

将它从参数列表中删除,如下所示:

function B(p,u) {
    var foo = {};
    foo[u] = function() {
        alert('visit internal page '+p);
    };
    $.router(foo);
}

目前你在内部函数上指定了一个参数p,除非在调用它时提供它(似乎不是),更多的本地p变量将是{{1} }。相反,只是不要将其指定为参数,它将使用父作用域中的undefined

答案 1 :(得分:1)

问题在于您同时拥有两个 p个变量。

function B(outer_p, u) { // <- first p
    var foo = {};
    foo[u] = function(inner_p) { // <- second p
        alert('visit internal page '+ outer_p); // depending on what 
    };                                          // you want to display here
    $.router(foo);
}