2014-09-24 71 views
0

我是JS新手,想學習。該規範要求如下: 編寫一個函數,該函數將另一個函數*作爲參數並創建一次只能被調用一次的函數版本。重複調用修改的函數將不起作用,從原始調用返回值。你怎麼能不使用閉包來做到這一點?它甚至有可能嗎?你怎麼能用閉包來做到這一點? *注意:這個原始輸入功能不應該有任何參數。在Javascript中執行簡單閉包時出現運行時錯誤

這是我有:

var divide = function() { 
var x = 2; 
var y = 6; 

return y/x; 
} 

var mainFunc = function (func) { 
return func(){ 
    return y/x + 1; 
} 
} 

var output = mainFunc(divide); 
console.log(divide()); 
console.log(output()); 
console.log(output()); 

我得到一個「意外令牌{」出錯「返回FUNC(){」我不太明白我做錯了什麼?根據規範,我將divide()傳遞給mainFunc()並將其設置爲參考變量輸出。然後我多次調用divide()和output()來測試閉包是否工作,並且修改過的函數只發生一次。我錯過了什麼或不理解?

感謝您的幫助。

+0

回報FUNC(其結果){//這是一個語法錯誤,{是這裏意外的標記 – 2014-09-24 19:37:20

+0

語法錯誤怎麼樣?我將divide()傳遞給mainFunc(),所以func()應該採用divide的屬性,對嗎? – rahul2001 2014-09-24 19:44:58

+0

如果你解釋你想要達到的目標,或許它可能有所幫助。用語言,而不是代碼。 – 2014-09-24 19:48:28

回答

0

在這裏你去:

function runonce(func) { 
    return (function(func) { 
    var ran = false; 
    var retval; 
    return function() { 
     if (!ran) { 
     ran = true; 
     retval = func(); 
     } 
     return retval; 
    } 
    })(func); 
} 

function realfunction() { 
    console.log('really running'); 
    return 5; 
} 

var realfunctionrunner = runonce(realfunction); 
realfunctionrunner(); 
realfunctionrunner(); 
realfunctionrunner(); 

研究代碼,整個招是「自包含庫」是從的RunOnce函數返回