猿问

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

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
    }
}

问题:以上三种定义函数/对象的方式,有什么区别

GavinZeng
浏览 1404回答 3
3回答

stone310

第一种是函数内部变量,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、函数嵌套,2、内部函数引用外部函数变量举个栗子:var fn1 = function () {     var a = 3;     retrun function () {         return a;     } } console.log(fn1()())//输出a的值闭包的作用:我们可以在全局范围内访问到函数内部的变量,并且私有化变量,因为我们不能对函数内部的变量进行更改。

qq_光明_2

区别不大
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答