使用函数参数创建变量

时间:2014-12-30 22:04:34

标签: javascript function

如何创建一个存储可以多次调用的函数参数的变量,而不是在我想调用它时重复相同的参数? (以下示例并非如此希望存储函数参数,但如果您有多个不同长度的参数可能会在多个位置使用,则会出现这种情况。非常便利)。

function showAlerts(alert1,alert2) {
    console.log(alert1 + '\n' + alert2);
}

// I would like to be able to define a variable that can be called later
// doing it this way (obviously) just runs the function immediately
var alerts1 = showAlerts('test1','test2');
var alerts2 = [showAlerts('test3','test4')];
var alerts3 = ['test5','test6'];

if(0===1) {
  alerts1; 
} else if(1===0) {
  alerts2;
} else {
  showAlerts(alerts3);
}

http://jsbin.com/cenili/1/edit?html,js,console

2 个答案:

答案 0 :(得分:6)

使用.bind()

var alerts1 = showAlerts.bind(undefined, "test1", "test2");

alerts1(); // note the () which are still necessary to call the function

.bind()的第一个参数是调用函数时绑定到this的值,这是大多数人使用.bind()执行的操作。但是,任何其他参数都作为参数传递。

您仍然可以使用alerts1()传递参数,它们将是第三,第四,第五等参数。

答案 1 :(得分:-2)

使用闭包,返回的内部函数将绑定参数。此外,它的跨浏览器也适用于不支持bind

的旧版浏览器
function getShowAlertsFunc() {
    var args = arguments
    return function() {
        for(var i=0; i<args.length; i++) {
            console.log(args[i]);   
        }
    }
}

用法

var alert1 = getShowAlertsFunc("john", "doe")
var alert2 = getShowAlertsFunc("jane", "doe")
var alert3 = getShowAlertsFunc("test", "abc", "123")

alert1()
alert2()