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

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

这是我的代码:

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); 

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

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

 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" 

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

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

在函数内部,我将用户名作为提交按钮的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); 

感谢那些回答我问题的人。

您可以使用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"] 

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

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

不要将变量与值混淆。

这涉及到参数的范围以及它们的定义。 您需要将警报包装在接收参数的函数中。 可以是调用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); }); }