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

关于javascript的闭包

关于javascript的闭包

慕哥6287543 2019-05-24 10:48:29
functionreturnfunc(propertyName){returnfunction(obj){//-----这行定义并返回了一个闭包,也被称之为一个匿名函数returnobj[propertyName];};}varsavefunc=returnfunc("name");//调用returnfunc()varresult=savefunc({name:"Picasso"});//调用savefunc()alert(result);//返回字符串“Picasso”这段代码看了很久了,但是完全一头雾水。为什么最后输出了Picasso为什么可以把{name:"Picasso"}作为savefunc的参数呢,savefunc不是应该等于obj[propertyName]吗?求大牛解答,js好复杂啊。__感谢大家的回答,非常感谢。不过只能采纳一个,抱歉了。
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

理解这个并不需要知道闭包,并且我建议你在js还不太熟悉的情况下,更不用去知道什么是闭包,这样只会增加学习成本<------分割线------>1.returnfunc这个函数接返回值也是一个函数,所以在执行varsavefunc=returnfunc("name");之后。现在的
savefunc=function(obj){
returnobj["name"];
}
2.savefunc现在是一个函数,他又接收了一个参数{name:"Picasso"},这个参数是一个对象,他不但可以是这种格式的对象,也可以是一段函数(因为函数也是对象),我这样说,你可能更晕。。。简单说,函数传参的形式不限于字符串)。于是就变成了
result=function({name:"Picasso"}){
return{name:"Picasso"}["name"];
}
此时返回{name:"Picasso"}["name"]。name作为对象的key,找到了,此对象的值Picasso。
                            
查看完整回答
反对 回复 2019-05-24
?
心有法竹

TA贡献1866条经验 获得超5个赞

一步一步解析代码
functionreturnfunc(propertyName){
returnfunction(obj){
returnobj[propertyName];
};
}
//此时的savefunc为functin(obj){returnobj[propertyName];}
varsavefunc=returnfunc("name");
//现在就开始执行function(name){returnobj[name]}为什么是name呢
//因为闭包的关系propertyName就是returnfunc函数中的参数“name”
//所以函数体里执行的是return{name:"Picasso"}[name]
varresult=savefunc({name:"Picasso"});
//返回字符串“Picasso”
console.log(result);
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号