2012-05-16 75 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