Eloquent Javascript中的Javascript函数

Javascript function in Eloquent Javascript

在返回函数中,greaterThanTen(9)如何成为y变量?我的意思是,参数(9)如何在返回函数参数中变成y?从greaterThanTen = greaterThan(10)起,9不会被x取代吗?9不是只是替换x = 10参数吗?我只是不明白返回函数中的9参数是如何到达y的。

1
2
3
4
5
6
7
8
 function greaterThan(x) {
   return function(y) {
     return y > x;
   };
 }

 var greaterThanTen = greaterThan(10);
 show(greaterThanTen(9));


它不会"变成y变量"。函数greaterThan返回一个函数,传递给greaterThan的值在返回的函数中被"捕获"。

换句话说,greaterThan(10)创建了以下功能:

1
function(y) { return y > 10; }

类似于写作:

1
function greaterThan10(y) { return y > 10; }

创建函数的函数利用闭包("捕获"10的东西)。

优点是你不需要为你想要使用的每一个数字不断地编写greaterThanNnn函数,你只需要为你需要的任何东西调用greaterThan(n)。当然,这是一个做作但很受欢迎的例子。

有关引用函数的信息块,何时使用()和何时不使用,以及一些更实际的示例,请参见:

  • 调用函数和引用函数的区别?
  • 我什么时候用括号,什么时候不用?
  • 为什么函数语句需要名称?


您必须了解JavaScript中闭包概念的基础。闭包是Javascript语言中最复杂和特别的添加。正如您将注意到的,它们遵循语言流的词汇范围。在这个例子中,

1
2
3
4
5
6
7
8
 function greaterThan(x) {
   return function(y) {
     return y > x;
   };
 }

 var greaterThanTen = greaterThan(10);
 console.log(greaterThanTen(9));

如果您看到闭包的主要概念。调用函数greaterThan后,它将创建另一个函数。但当你通过第一个论点10时,它取代了x。当调用函数并传递第二个参数9时它发生在y上,即内置的功能。通过这种方式,值存储在函数调用堆栈中,您可以对这些值进行比较和操作。


当调用greaterThan(10)时,它将赋值为x并返回greaterThanten变量中的函数,该变量现在变为

1
var greaterThanTen = function(x){10>x};

然后在下一行中,您调用了greaterthen(9),这样它将分配x值。我希望你明白我说的话。