JS / JQ:来自内联函数的访问变量

时间:2014-10-04 22:07:05

标签: javascript jquery scope

我试图在我的getJSON函数中使用变量。我怎么能把它传递进来?这就是我尝试过的。

function getComments(parent_id) {
    if(typeof(parent_id)==='undefined') parent_id = -1;
    console.log("parent_id type: " + typeof(parent_id)); // parent_id type: number 
    var message = { parentMessageID: parent_id };
    $.getJSON(UPDATECOMMENTCALL, message, function(data, parent_id) {
        console.log("JSON parent_id: " + typeof(parent_id)); // JSON parent_id: string
    }
}

在函数内部,parent_id不是-1,而是一个值为"成功"的字符串。我怎样才能正确传递它?

2 个答案:

答案 0 :(得分:0)

您的回调函数参数的优先级高于具有相同名称(parent_id)的范围变量。因此,通过在回调函数中访问它,您实际上是在引用函数参数而不是您在函数外部定义的变量。更改回调变量的名称将修复它。例如:

var parent_id = -1;    
console.log("parent_id type: " + typeof(parent_id)); // parent_id type: number 
var message = { parentMessageID: parent_id };
$.getJSON(UPDATECOMMENTCALL, message, function(data, p_id) { // changed to p_id
    console.log("JSON parent_id: " + typeof(parent_id)); // JSON parent_id: string
}

一般来说,避免使用相同的名称是一个好主意,因此远离所有重复的名称混乱。


简单示例向您展示正在进行的操作:

var a = 1;
function f(a) {
    console.log(a);
}

考虑将f(2);输出的内容。

答案 1 :(得分:0)

您可以使用它,不要将它作为参数放在getJSON的回调函数中,只需将其用作变量,因为它已经是全局的。