js/html 请教个js函数参数传递的问题

在js函数中,参数传递有没有所谓的值传递或者是地址/索引传递的??
如果我的js函数的参数是一个jquery对象,那么它的传递属于哪种。此外,例如:
for(var i=0;i<10;i++){
var obj=$("#a_id"+i);
$.ajax({
url:"/url",
type:"post",
dataType:"json",
data:({}),
success:success
});
function success(json){
alert(obj.text());

}
}

这种情况下,传递到success函数中的obj的参数有没有变化的??(例如当i=0时候,a_id0变成是a_id2的对象等,因为ajax是异步请求,故而求解)

// js也有地址传递, 来个例子吧

// 接收一个Object,没有返回值
function test (obj2) {
    obj2.prop = 2; // 修改obj的属性
    obj2.attr = 3; // 添加属性
}

// obj是一个对象
var obj = {
    prop: 1 // obj的属性
};

test(obj);
// 没有返回值,但是obj被修改了
alert(obj.prop); // 2
alert(obj.attr); // 3

// 这种情况就是地址传递吧

for (var i = 0; i < 10; i++) {
    var obj = $("#a_id" + i);
    $.ajax({
        url: "/url",
        type: "post",
        dataType: "json",
        data: ({}),
        success: success
    });

    function success(json) {
        // 这里obj不会是"#a_id" + i
        // 而是for循环结束之后的obj,也就是#a_id9
        alert(obj.text());

    }
}

// for循环结束之后obj是#a_id9, 也就是最后一个
alert(obj.attr('id') == 'a_id9'); // true

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-05
其实,本质上,JS是没有引用传递的,函数的传参,都是传值。

但是这里要牵扯到一个变量作用域的问题。
你写的这个部分有问题,先假如没有这个for循环,你这个ajax是在一个函数局部定义了一个局部变量obj的话
因为ajax的success回调函数执行的时候,这个局部函数已经终结,obj已经结束了其生命周期,所以这个时候的obj肯定是undefined
第2个回答  2013-12-05
你定义的type是post就是post,定义的是get就是get,你这个里面定义的是post追问

不好意思,这里是两个问题,我说的是函数的参数,不是请求的参数

相似回答