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。

心有法竹
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);
添加回答
举报
0/150
提交
取消