JavaScript闭包原则

1、了解闭包(closure)必须知道,javascript的作用域(scope)问题:

javascript的作用域问题,即变量(函数-内部函数)的作用域问题。根据javascript的语法规则,变量(函数)声明在外部即视为全局变量(函数),可以直接在任何地方调用。

我们常用的变量分为全局变量和局部变量,而局部变量只能在函数内部调用。要实现外部调用局部变量的方法就会涉及到跨域问题,因此使用javascript的闭包函数来加以解决。

这里有几种关于变量作用域的调用写法:

(1)、改变全局变量

var name="peaty";

function getName(){ name='shine';  }  getName();//shine

(2)、调用函数内部变量

function number(){ var num=2;} number(num);//undified

(3)、函数内部也有全局变量--javascript语法原则(无var 声明的变量视为全局变量)

function say(){var s="you";} say(); alert(s);//you 

2、什么是javascript的闭包原则:

闭包原则就是把一些变量封装起来,与外部函数建立一个依赖,在全局变量与局部变量之间搭建桥梁,使外部可以轻松地访问到局部变量的函数或对象表达式。

3、使用闭包的目的

一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

这样做就可以协调我们有些数据作为全局变量来控制,将一些有必要不清理的数据临时保存起来。

4、闭包函数的写法

(1)、作为内部函数实现闭包

 function fun(){

    var n=0;

    nAdd=function(){n+=1}

    function fun2(){
      alert(n);
    }

    return fun2;

  }

var result=fun(); 

result();//0

nAdd();

result();//1,对于fun2而言fun的所有属性均可见

5、闭包的运行原理

var name = "xxx";

  var object = {
    name : "My Object",

 

    getNameFunc : function(){
      var that = this;//上下文对象,全局化
      return function(){
        return that.name;//实现修改局部变量转换为全局变量
      };

          }

 

  };

alert(object.getNameFunc()());
原文地址:https://www.cnblogs.com/boonya/p/2497715.html