2014-05-20 142 views
3

我在JavaScript中遇到了一個問題,它使用了函數作用域的概念。特別是,這是我需要解決的:javascript功能範圍挑戰

定義一個名爲callFunc的函數,它接受一個參數f。它應該返回一個包含值f(0),f(0),f(1),f(1)的數組。你只能調用f兩次。

到目前爲止我的代碼是:

var f = function(x) { 
    return x+2; 
}; 

var callFunc = function (f) { 
    return [f(0), f(1)]; 
}; 

我不知道我怎麼能回到僅使用兩個電話和JavaScript函數範圍原則四個元素的數組。

回答

6

這真的很簡單:

function callFunc(f) { 
    var f0, f1; 
    f0 = f(0); 
    f1 = f(1); 
    return [f0,f0,f1,f1]; 
} 

我......不完全知道爲什麼你有麻煩。減少函數調用的次數是你應該做的事情(這也是爲什麼我會對大多數jQuery代碼感到羞恥,因爲它有$(this)就像20次...)

+2

有關調用'$(this)'的註釋' 20次:大多數前端代碼應該異步執行,只執行最少的工作。因爲代碼通常不是作爲UI循環的一部分被執行,而是偶爾被調用,所以這些微優化在很大程度上是不必要的。在優化*很重要的情況下,減少函數調用無疑是一種有用的技術,但有時寫代碼顯然比編寫代碼的速度更快。 – zzzzBov

+0

@zzzzBov我的意思是當你看到'var t = $(this).text(); $(this).text(t +「123」);'(過簡化)。基本上,當你只需要'$ this = $(this)'並且之後簡單地引用'$ this'時,就會重複調用'$(this)'。 –

+0

我不確定你的代碼是否是corect。這裏是我試圖解決的問題的鏈接:[函數範圍](https://nathansjslessons.appspot.com/lesson?id=1055) – Radu