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

Kri*_*j K 6 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);
Run Code Online (Sandbox Code Playgroud)

Rob*_*b W 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
Run Code Online (Sandbox Code Playgroud)

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

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"
Run Code Online (Sandbox Code Playgroud)

  • @NickyDeMaeyer你指的是使用全局变量.这是不推荐的,因为与其他嵌入式脚本存在潜在的可变冲突.此外,全球范围不应因不必要的全局变量而受到不必要的污染. (2认同)

jay*_*Son 5

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

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

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

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

或者你trim()在收集它们后使用每个参数:

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