2010-11-21 36 views
1

我试图p的值传递给报警功能 - 不幸的是,在它只是出来作为未定义的时刻。我认为这个问题是因为当这个函数被调用时p不存在了。我将如何通过p该功能,并使其保留的价值?传递一个变量的函数(范围问题)

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

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

回答

3

刚刚离开它从参数列表,像这样:

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

您目前的内部函数指定参数p,除非这是当它被称为提供的(似乎并不它是)更多的本地p变量将是undefined。相反,不要将其指定为参数,它将使用父范围中的p

+0

奇妙的是,这比我预期的要容易!不知道为什么这样做,但我必须做一些研究。感谢你的回答! – RichW 2010-11-21 11:02:47

+1

@RichW - 可以使用父范围中的任何变量,但是必须指定任何*级别的函数上的任何参数,所以当你有'function(p)'时,只需通过'foo [u ]()',它将会是'undefined' ...因为你没有传递任何参数,但是通过将它关闭,它可能使用的唯一的'p'就是父范围中的那个......这样做更有意义吗? – 2010-11-21 11:08:33

+0

现在感觉非常完美,谢谢Nick!不幸的是,这些问题之一似乎很难在Google上进行研究,因为您不知道该键入什么内容! – RichW 2010-11-21 11:12:14

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); 
} 
+0

我希望p的值可以通过函数继承(猜测它不能像那样工作!)。谢谢(你的)信息! – RichW 2010-11-21 11:03:47

+0

你的继承意味着什么?外部'p'可用于您的内部功能。 **但是**如果你在内部函数参数列表中声明了'p',它将被默认分配'undefined'并且由于名称冲突将覆盖/隐藏外部'p'。 – galambalazs 2010-11-21 11:35:17