2014-05-20 149 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