javascript闭包是什么?

我的问题就是如下:functionclosure(){varobject={getNameFunc:function(){returnfunction(){return"... 我的问题就是如下:
function closure(){
var object = {
getNameFunc : function(){
return function(){
return "我的父亲(getNameFunc)不是闭包,我才是闭包,这是为什么呢?";
};
}
};
};
问题:javascript高级程序设计中对javascript闭包的定义是:定义在函数内部的函数!getNameFunc对应的这个function定义在closure这个函数内部,为什么却不是闭包?
求大神专业回答我这个问题
展开
 我来答
Prince____Yu
2013-12-17 · TA获得超过3718个赞
知道小有建树答主
回答量:864
采纳率:33%
帮助的人:966万
展开全部

定义在函数内部的,能访问外部函数的变量的函数叫做闭包。

所以闭包是相对的。就像你上面:

 function(){
return "我的父亲(getNameFunc)不是闭包,我才是闭包,这是为什么呢?";
};

这个匿名函数是定义在getNameFunc方法内的,能访问getNameFunc中的属性,所以他才是闭包。

see7di
2013-12-17 · TA获得超过299个赞
知道小有建树答主
回答量:793
采纳率:0%
帮助的人:381万
展开全部
js闭包就是在js的function内嵌套function,这种做法很糟糕,很容易导致内存洩露,很不推荐这样写代码.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三间北房
2013-12-17 · TA获得超过1311个赞
知道小有建树答主
回答量:629
采纳率:66%
帮助的人:519万
展开全部
闭包应该能供外部访问函数内部变量,getNameFunc做不到这一点,所以不是闭包。
个人理解。
追问
getNameFunc不能访问closure函数的局部变量?你确定?
追答

不是它不能访问,是你现在这么写,外部不能通过getNameFunc访问,如果你return一个object那就是另一回事了。比如下面这个代码就不是闭包,因为func1执行完了之后,变量a就不存在了,也不能访问了。

function func1(){
    var a=1;
    function func2(){
        alert(a);
    }
}

func1();

下面这就是闭包,func1执行完之后,每次执行myfunc都可以访问func1中的变量a,如果再修改一下代码改成alert(a++)就更明显了。整因为如此,函数func1执行完,但是内存并没有释放,所以,如果操作不当,会造成内存泄露。

function func1(){
    var a = 1;
    function func2(){
        alert(a);
    }
}

var myfunc = func1();
myfunc();
myfunc();
myfunc();
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
crystaljmh
推荐于2016-06-01 · TA获得超过993个赞
知道小有建树答主
回答量:740
采纳率:66%
帮助的人:270万
展开全部
闭包是指一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包的特点:
  1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
  2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
  简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式