function returnfunc (propertyName) { return function (obj) {//-----这行定义并返回了一个闭包,也被称之为一个匿名函数 return obj[propertyName]; };}var savefunc = returnfunc("name"); //调用returnfunc()var result = savefunc({name:"Picasso"});//调用savefunc()alert(result); //返回字符串“Picasso”这段代码看了很久了,但是完全一头雾水。为什么最后输出了Picasso为什么可以把{name:"Picasso"}作为savefunc的参数呢,savefunc不是应该等于obj[propertyName]吗?求大牛解答,js好复杂啊。__感谢大家的回答,非常感谢。不过只能采纳一个,抱歉了。
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
理解这个并不需要知道闭包,并且我建议你在js还不太熟悉的情况下,更不用去知道什么是闭包,这样只会增加学习成本
<------分割线------>
1.returnfunc 这个函数接返回值也是一个函数,所以在执行var savefunc = returnfunc("name");之后。现在的
savefunc = function(obj){
return obj["name"];
}
2.savefunc现在是一个函数,他又接收了一个参数{name:"Picasso"},这个参数是一个对象,他不但可以是这种格式的对象,也可以是一段函数(因为函数也是对象),我这样说,你可能更晕。。。简单说,函数传参的形式不限于字符串)。
于是就变成了
result = function({name:"Picasso"}){
return {name:"Picasso"}["name"];
}
此时返回{name:"Picasso"}["name"]。 name作为对象的key,找到了,此对象的值Picasso。
添加回答
举报
0/150
提交
取消