将参数传递给函数我不想立即执行

时间:2013-12-02 12:55:12

标签: javascript javascript-events

很抱歉,如果我的问题看起来很幼稚(这里有点新手),但我似乎无法得到一个简单的答案。 在JavaScript中我尝试这样的东西

    window.onload = init; *// ok, this assigns to the window load event a function that doesn't execute straight away*
    // now I define my init()function
    function init(){
    // say...
    alert('Noise!');

    /* but here is my dillema... 

接下来说我想为button.onclick事件分配一个只在我点击按钮时执行的功能。 但是(!这里是......!)我想从这里传递参数到这个函数而不会导致执行,因为它(显然)有括号。 类似的东西:* /

    var button = document.getElementById('button');

    var promptInput = prompt("Name?");
    button.onclick = printName(promtInput); // I only want to print name on button click
    }

    function printName(name){
    alert(name);
    }

所以......好吧,我知道这个例子很愚蠢。只需移动printName()函数内的所有提示收集并分配给button.onclick一个无括号的printName函数将解决问题。我知道。但是,仍然。有没有办法将args传递给你不想立即执行的函数?或者它确实是一个规则(或“定义”)你只使用等待执行的函数,当你不打算通过它传递args时?

或者你最喜欢这件事呢?

非常感谢! TY

3 个答案:

答案 0 :(得分:4)

button.onclick = function() {
    printName(promptInput);
};

答案 1 :(得分:0)

您可以使用Function.prototype.bind()

  

bind()方法创建一个新函数,当被调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

例如:

button.onclick = printName.bind(null, promtInput);

答案 2 :(得分:0)

您可以将通常作为参数传递的数据放入其他某个持有位置。您可以将其放在隐藏的HTML元素中,也可以使用sessionStorage API来保留它。所以你的代码看起来像这样:

var button = document.getElementById('button');

var promptInput = prompt("Name?");
sessionStorage.setItem('MyName', promptInput);

button.onclick = printName; // I only want to print name on button click
}

function printName(){
alert(sessionStorage.getItem('MyName');
}