返回

将JavaScript作为值使用

前端

JavaScript 函数可以作为值使用,这意味着您可以像传递参数一样将函数传递给另一个函数,还可以将一个函数作为另一个函数的结果返回。 sort() 方法就是用到这种从一个函数返回另一个函数的方法。

函数内部属性:arguments 和 this

JavaScript 函数有两个特殊的内部属性:arguments 和 this。

  • arguments 属性包含传递给函数的所有参数,无论这些参数是否已声明。例如,如果函数如下:
function sum() {
  console.log(arguments);
}

然后调用函数如下:

sum(1, 2, 3);

那么 arguments 属性将包含以下值:

[1, 2, 3]
  • this 属性指向函数所属的对象。例如,如果函数如下:
var person = {
  name: "John",
  greet: function() {
    console.log(this.name);
  }
};

然后调用函数如下:

person.greet();

那么 this 属性将指向 person 对象,因此 console.log(this.name) 将输出 "John"。

函数作为参数

JavaScript 函数可以作为参数传递给另一个函数。例如,您可以将函数作为回调函数传递给 sort() 方法,如下所示:

var numbers = [1, 4, 3, 2, 5];

numbers.sort(function(a, b) {
  return a - b;
});

console.log(numbers);

这个代码片段将使用 sort() 方法对 numbers 数组进行排序。sort() 方法接受一个回调函数作为参数,该回调函数将比较两个元素并返回一个值。如果回调函数返回一个负值,那么第一个元素将排在第二个元素前面。如果回调函数返回一个正值,那么第二个元素将排在第一个元素前面。如果回调函数返回 0,那么两个元素将保持原来的顺序。

函数作为返回值

JavaScript 函数还可以作为另一个函数的结果返回。例如,您可以编写一个函数来创建另一个函数,如下所示:

function createGreeter(name) {
  return function() {
    console.log("Hello, " + name + "!");
  };
}

var greeter = createGreeter("John");

greeter();

这个代码片段将创建一个名为 createGreeter() 的函数,该函数接受一个名称作为参数并返回一个函数。返回的函数将打印出 "Hello, [name]!"。然后,该代码片段创建一个名为 greeter 的变量,该变量存储由 createGreeter() 返回的函数。最后,greeter() 函数被调用,这将打印出 "Hello, John!"。

闭包

JavaScript 函数可以访问其定义作用域中的变量,即使该函数已被执行并返回。这意味着您可以创建一个函数,该函数可以在其定义作用域之外使用变量。这种类型的函数称为闭包。

例如,您可以编写一个函数来创建一个计数器,如下所示:

function createCounter() {
  var count = 0;

  return function() {
    return count++;
  };
}

var counter = createCounter();

console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2

这个代码片段将创建一个名为 createCounter() 的函数,该函数返回一个函数。返回的函数将返回一个计数器,该计数器在每次调用时都会增加 1。然后,该代码片段创建一个名为 counter 的变量,该变量存储由 createCounter() 返回的函数。最后,counter() 函数被调用三次,这将打印出 0、1 和 2。

闭包非常强大,可用于创建各种类型的应用程序。例如,您可以使用闭包来创建计数器、计时器、状态管理和游戏开发。