javascript闭包是什么?
我的问题就是如下:functionclosure(){varobject={getNameFunc:function(){returnfunction(){return"...
我的问题就是如下:
function closure(){
var object = {
getNameFunc : function(){
return function(){
return "我的父亲(getNameFunc)不是闭包,我才是闭包,这是为什么呢?";
};
}
};
};
问题:javascript高级程序设计中对javascript闭包的定义是:定义在函数内部的函数!getNameFunc对应的这个function定义在closure这个函数内部,为什么却不是闭包?
求大神专业回答我这个问题 展开
function closure(){
var object = {
getNameFunc : function(){
return function(){
return "我的父亲(getNameFunc)不是闭包,我才是闭包,这是为什么呢?";
};
}
};
};
问题:javascript高级程序设计中对javascript闭包的定义是:定义在函数内部的函数!getNameFunc对应的这个function定义在closure这个函数内部,为什么却不是闭包?
求大神专业回答我这个问题 展开
4个回答
展开全部
js闭包就是在js的function内嵌套function,这种做法很糟糕,很容易导致内存洩露,很不推荐这样写代码.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
闭包应该能供外部访问函数内部变量,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();
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
闭包是指一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包的特点:
1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
闭包的特点:
1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询