javascript 闭包问题,为什么要写成闭包的形式?

查看:112
本文介绍了javascript 闭包问题,为什么要写成闭包的形式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我看闭包是为了能让外部得到函数内部定义的局部变量。
那为什么一定要写成这样的形式呢?

function f1(){
    var n=999;
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999

就直接return 不行么?像这样

function f1(){
    var n=123;
    return n;
}
x=f1();
alert(x);  ///123

这也是闭包么?

解决方案

首先,第二个肯定不是闭包,闭包是一个函数。
闭包一般用来隐藏或说保护我们的一些成员变量,通过闭包的形式返回出去一个能够操作我们保护起来的成员变量的函数。

    function f1(){
    var n=999;
    function f2(){
      alert(n++);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
    result();// 1000

像上面这样,我们就能够访问f1的私有变量n,并且只能用每次+1的方式进行操作,一般来说闭包的使用像下面这样:

    var car = (function(){
            var _wheels = 4;

            return {
                setWheels : function(value){
                    if (value < _wheels) {
                      throw new Error('数值太小了!');
                    }
                    _wheels = value;
                },
                getWheels : function(){
                    return _wheels;
                }
            }

        })();

我们给汽车轮子数量赋值的时候,是要调用set方法的,是不能随便赋值的。
如果像你第二张方式写的:

function f1(){
    var obj={age : 10};
    return obj;
}
obj=f1();
obj.age = -100;

我们是不是把年龄赋值成-100了

这篇关于javascript 闭包问题,为什么要写成闭包的形式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆