关于javascript的闭包

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好复杂啊。
__
感谢大家的回答,非常感谢。不过只能采纳一个,抱歉了。
慕哥6287543
浏览 352回答 2
2回答

海绵宝宝撒

理解这个并不需要知道闭包,并且我建议你在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。

心有法竹

一步一步解析代码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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript