我可以访问函数外的函数参数吗?
这是我的代码:
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);
答案 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);
});
}