为了账号安全,请及时绑定邮箱和手机立即绑定

关于闭包的问题,求高手解答!

关于闭包的问题,求高手解答!

GavinZeng 2016-10-11 09:56:56
var fn1 = function () {     var a = 10;     var b = function () { alert(123); };     var c = {         name: "lazy",         year: 1981     } }var fn2 = function () {     this.a = 10;     this.b = function () { alert(123); };     this.c = {         name: "lazy",         year: 1981     } }var fn3 = {     a: 10,     b: function (x) { alert(this.a + x); },     c: {         name: "lazy",         year: 1981     } }问题:以上三种定义函数/对象的方式,有什么区别
查看完整描述

3 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

第一种是函数内部变量,a,b,c属于私有变量,外界无法直接访问,可通过return返回或者闭包方法访问;

第二种a,b,c是定义函数(构造函数)的属性,当外部创建它的实例(new fn2())后,可访问;

var fn=new fn2();
console.log(fn.a)    //10

第三种是json对象,内部a,b,c是键,对应的是值,外部可直接通过fn3.a访问

console.log(fn3.a)   //10


查看完整回答
1 反对 回复 2016-10-11
?
堂堂堂堂糖糖糖童鞋

TA贡献101条经验 获得超58个赞

你可以看一下:自定义对象,函数定义与调用

其实,你这几种情况都不是闭包,

闭包条件:1、函数嵌套,2、内部函数引用外部函数变量

举个栗子:

var fn1 = function () {
    var a = 3;
    retrun function () {
        return a;
    }
}
console.log(fn1()())//输出a的值

闭包的作用:我们可以在全局范围内访问到函数内部的变量,并且私有化变量,因为我们不能对函数内部的变量进行更改。

查看完整回答
3 反对 回复 2016-10-11
?
qq_光明_2

TA贡献3条经验 获得超3个赞

区别不大

查看完整回答
反对 回复 2016-10-11
  • 3 回答
  • 0 关注
  • 1403 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信