2013-04-06 91 views
-1

我有這樣的情況:傳遞函數

<script> 
var cb; 
function doSomething(c) { 
    cb = c(); 
} 

cb(); 
</script> 

但它不工作。我想設置一個變量作爲函數,使其他函數調用回調。有些想法?

+0

c.call是你在找什麼 – 2013-04-06 21:21:48

回答

2

c()執行的功能,並返回一個值,你需要一個參考給它:

cb = c 

此外,你應該調用函數doSomething(func)進行分配。

doSomething(function(){ alert('hello'); }); 
cb(); // "Hello" 

但是,如果你想要的是一個回調那麼你並不需要一個全局變量:當你與其他功能參數的回調將運行運行功能

function doSomething(callback) { 
    // do something 
    if (callback) callback(); 
} 

+0

另外,你應該調用函數doSomething – 2013-04-06 21:21:55

+0

謝謝!然而:「但是,如果你想要的是一個回調,那麼你不需要一個全局變量」,是的,我需要'因爲我需要從其他函數回憶該函數,我不能通過它作爲arg – Grork 2013-04-06 21:38:01

0

您需要分配CB先用你的函數:

<script> 
var cb; 
function doSomething(c) { 
    cb = c; 
} 

var myFunc = function(){ 
    window.alert("test"); 
} 

doSomething(myFunc); 

cb(); 
</script> 

如果你這樣做cb=c();將執行功能c瞬間,如果你想變cbc結果值返回給cb,這樣做。否則,分配而不運行它。

0

你有3只選擇一個變量設置爲functiion

  1. var fn = functionname;
  2. var fn = function(param){};這將是一個匿名函數
  3. var fn = function FunctionName(param){};這將是一個名爲功能就派上用場了調試時,因爲它會爲您提供一個函數名稱(console.log(c);

您不能稱之爲var returnVal = fn();或將其傳遞給函數var returnVal = myFunc(fn);其中myFunc的調用帕拉姆,讓它成爲inFn它像inFn();

什麼可能是值得注意的:因爲這樣的功能是關係到全球範圍內 ,可以綁定一個對象它改變了它的範圍。這給了你引用綁定對象的可能性this。 (請注意,綁定是不是所有的瀏覽器,因爲它被定義ECMAScript 5支持,但也有相當一些polyfills在那裏。)

  • fn.bind(object);

或用fn.call(object, param1, param2)fn.apply(object, [param1, param2])調用它在另一種情況下。尼斯寫在這Link to odetocode.com/blog