如何在函数外部访问JavaScript函数参数?

时间:2012-02-27 10:57:49

标签: javascript jquery

我可以访问函数外的函数参数吗?

这是我的代码:

function viewmessage(username,name) {
        //alert(name + " : " + username);
        $('#heading').html(name);
        $.get('/notification/viewmessage', {user:username}, function(data) {
            $('#messagesfrom').html(data);
            $('#newmessage').slideDown(200);
        });
    }
alert(name + " : " + username);

6 个答案:

答案 0 :(得分:5)

你不能,除非你在函数之外声明变量。

您只能在全局范围内使用相同的变量名称:

function viewmessage(username, name){
    window.username = username;
    window.name = name;
}
alert(window.name + " : " + window.username ); // "undefined : undefined"
alert(name+" : "+username); // ReferenceError: 'name' not defined

在本地范围内,您必须使用在函数内重新声明的变量名称:

var username2, name2;
function viewmessage(username, name){
    username2 = username; // No "var"!!
    name2 = name;
}
alert(username2 + " : " + name2); // "undefined : undefined"
viewmessage('test', 'test2');
alert(username2 + " : " + name2); // "test : test2"

答案 1 :(得分:2)

您可以使用RegEx(正则表达式)来获取参数:

function viewmessage(username, name) {/*...*/}
var args = viewmessage.toSource()
           .match(/\((?:.+(?=\s*\))|)/)[0]
           .slice(1).split(/\s*,\s*/g);
//args = ["username", "name"]

请确保您在(之后或)之前没有任何空格。否则,您可能会得到以下结果:

function viewmessage( username, name ) {/*...*/}
var args = viewmessage.toSource()
           .match(/\((?:.+(?=\s*\))|)/)[0]
           .slice(1).split(/\s*,\s*/g);
//args = [" username", "name "]

或者在收集完每个参数后对其使用trim()

args.forEach(function (e, i, a) {a[i] = e.trim();});
//args = ["username", "name"]

答案 2 :(得分:1)

您可以在函数中返回这些变量:

var viewmessage = function(username, name){
    // Blabla
    return {
        username: username,
        name: name
    }
}

// And then...
var vm = viewmessage('wutup', 'Peter');
alert(vm.name +" : "+ vm.username);

答案 3 :(得分:1)

在函数内部,我将用户名作为提交按钮的id。或者也可以使用空div。

function viewmessage(username,name){
        //alert(name+" : "+username);
        $("#submit").attr('id', username);
        $('#heading').html(name);
        touser = username;
        $.get('/notification/viewmessage',{user:username},function(data){
            $('#messagesfrom').html(data);
            $('#newmessage').slideDown(200);
        });
    }
var touser = $("#submit").attr("id");
alert(touser);
感谢那些回答我问题的人。

答案 4 :(得分:0)

您不能从函数外部访问函数的参数。这就是变量范围的全部内容。

如果您想要访问变量的值,则需要将该值从函数内部传递给全局变量,然后您就可以从外部访问该值。

不要将变量与值混淆。

答案 5 :(得分:0)

这涉及参数的范围和它们的定义。您需要将警报包装在接收参数的函数中。可以是调用viewMessage然后发出警报的函数,也可以是在ajax请求之后将警报移动到成功处理程序中的警报,如下所示:

function viewmessage(username,name){
        $('#heading').html(name);
        $.get('/notification/viewmessage',{user:username},function(data){
            $('#messagesfrom').html(data);
            $('#newmessage').slideDown(200);
            alert(name+" : "+username);
        });
    }