2012-05-16 47 views
2

这里是一个简单的脚本:传递变量的值

function parentFunc() { 
    var x = 15; 
    process(x); 
} 

parentFunc(); 

function process(x) { 
    alert(x); 
}​ 

现在在页面加载时,parentFunc()正在执行与发送的参数设置为沿调用process()功能;有什么办法可以使它在调用parentFunc()时只是发送参数到process()函数而不执行它?我需要一个无全局变量的解决方案。

+1

“结束参数process()函数而不执行它”是什么意思?你是否想在后面执行时将'x'绑定到某个特定的位置? –

+0

我认为这个答案可能很粗鲁,但是:不可以。您的迭代或算法有问题。要么你必须使用全局变量,要么你现在需要重新考虑你的想法。 –

回答

3

如果我正确理解你的问题,你想绑定一个特定的参数process并稍后执行该功能?

你可以用.bind()[MDN]做到这一点。它接受一个上下文和参数,并创建了一个新功能:

var process_bound = process.bind(null, x); 
// later 
process_bound(); 

对于不支持的浏览器.bind()的实现,看看在MDN文档(或看火箭的评论)。


这里是你应该如何使用它:

function process(x) { 
    alert(x); 
}​ 

function parentFunc() { 
    var x = 15; 
    return process.bind(null, x); 
} 

var process_bound = parentFunc(); 

// now bind the event handler to the element 

var element = document.getElementById('someId'); 
element.onclick = function() { 
    process_bound(); 
    return false; 
}; 
+0

'.bind'可能不适用于所有的浏览器,如果它不起作用,请试试这个:var process_bound = function(x){return function(){process(x);}}(x)'。 –

+0

@火箭:对,MDN文档也提供了一个实现。 –

+0

啊,是的,polyfills工作太:-) –

0

使用闭包 - 你可以通过不同的值x和创造的每次调用parentscript时间参考不同的帧。

function parentscript(x) { 
process = function(){ 
    alert(x) 
} 
return process 
} 
f = parentscript(23); 
f(); //alerts 23