关于javascript的闭包

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好复杂啊。

__

感谢大家的回答,非常感谢。不过只能采纳一个,抱歉了。


慕娘9325324
浏览 288回答 1
1回答

犯罪嫌疑人X

理解这个并不需要知道闭包,并且我建议你在js还不太熟悉的情况下,更不用去知道什么是闭包,这样只会增加学习成本<------分割线------>1.returnfunc 这个函数接返回值也是一个函数,所以在执行var savefunc = returnfunc("name");之后。现在的savefunc = function(obj){&nbsp; &nbsp;return obj["name"];}2.savefunc现在是一个函数,他又接收了一个参数{name:"Picasso"},这个参数是一个对象,他不但可以是这种格式的对象,也可以是一段函数(因为函数也是对象),我这样说,你可能更晕。。。简单说,函数传参的形式不限于字符串)。于是就变成了&nbsp;result = function({name:"Picasso"}){&nbsp; &nbsp; &nbsp; &nbsp;return {name:"Picasso"}["name"];&nbsp; &nbsp; }此时返回{name:"Picasso"}["name"]。 name作为对象的key,找到了,此对象的值Picasso。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript