关键词

javascript学习笔记(十三) js闭包介绍(转)

“JavaScript学习笔记(十三) JavaScript闭包介绍”这篇文章是一篇介绍JavaScript闭包的文章。下面是这篇文章的完整攻略:

JavaScript学习笔记(十三) JavaScript闭包介绍

什么是闭包?

闭包是指函数和函数内部能访问到的变量的总和。也就是说,它指的是一个拥有许多变量和函数的实体。

简单来说,闭包是指在另一个函数内部定义的函数,并且在内部函数中访问了外部函数的变量。这个内部函数就是一个闭包。

闭包的作用

闭包的主要作用是让函数访问其创建时的作用域,即使函数在其原始作用域之外被调用。这种访问机制使得函数可以保存一些变量,从而在每次被调用时都能使用这些变量。

如何创建闭包?

在JavaScript中,闭包是自动创建的,只要在一个函数内部定义了另一个函数,闭包就会自动创建。

下面是一个简单的示例,演示了如何创建闭包:

function outerFunction() {
  var message = 'Hello, world!';

  function innerFunction() {
    alert(message);
  }

  return innerFunction;
}

var myFunc = outerFunction();
myFunc();

在这个示例中,函数outerFunction()内部定义了另一个函数innerFunction(),innerFunction()函数可以访问outerFunction()函数内部的变量message。这种访问机制就是闭包。

当我们在调用outerFunction()函数时,它将返回innerFunction()函数,并将其赋值给变量myFunc。接着,我们调用变量myFunc时,它将执行innerFunction()函数,并弹出一个包含“Hello, world!”消息的警告框。这是因为innerFunction()函数具有访问outerFunction()函数内部变量message的权限,因此可以读取和使用该变量的值。

闭包的例子

下面,我将演示一个更具体的闭包示例。这个示例展示了如何在JavaScript中使用闭包来创建私有变量。

function Person(name) {
  var _name = name;

  this.getName = function() {
    return _name;
  };

  this.setName = function(name) {
    _name = name;
  };
}

var person = new Person('John');
alert(person.getName()); // 输出 'John'
person.setName('Mike');
alert(person.getName()); // 输出 'Mike'

在这个示例中,我们创建了一个构造函数Person(),该函数具有一个私有变量_name。Person()函数还定义了两个公共方法:getName()和setName(),这两个方法分别用于获取和设置_name变量的值。

当我们使用new运算符创建一个新的Person对象时,该对象中的_name变量将被初始化为'name'参数的值(在这个例子中是'John')。此后,我们可以通过调用person.getName()方法获取_name的值,也可以通过调用person.setName()方法将其设置为一个新值。

值得注意的是,_name变量是私有的,因为它只能通过这两个公开方法来访问。这是因为它是在Person()函数内部定义的,并且只能在函数内部访问。由于getName()和setName()方法都是在Person()函数内部定义的,并具有访问__name变量的权限,因此它们可以用于读取和修改_name变量的值,从而实现了一个私有变量。这就是闭包的神奇之处。

本文链接:http://task.lmcjl.com/news/12010.html

展开阅读全文