JavaScript学习笔记(十三) 返回函数和"自定义"函数
返回函数(Returning Functions)函数是对象,所以它们可以被当做返回值;这意味着一个函数不一定要返回某种数据或数据的数组作为它的返回值;一个函数可以返回另一个更加专业的函数,或者依赖于输入返回一个合适的函数;
这里有个例子:一个函数做了一些工作,可能是一些一次性的初始化的工作,然后在返回值上继续工作,返回值恰巧是另外一个函数,可以被执行:
// 1. adding a new propertyscareMe.property = "properly";// 2. assigning to a different namevar prank = scareMe;// 3. using as a methodvar spooky = {boo: scareMe};// calling with a new nameprank(); // "Boo!"prank(); // "Boo!"console.log(prank.property); // "properly"// calling as a methodspooky.boo(); // "Boo!"spooky.boo(); // "Boo!"console.log(spooky.boo.property); // "properly"// using the self-defined functionscareMe(); // Double boo!scareMe(); // Double boo!console.log(scareMe.property); // undefined正如你看到的,当函数被赋值给一个新的变量后,你期待的自我定义就不会发生,每一次prank()被调用,会提示"BOO!";同时,它也会重写全局的scareMe()函数,但prank()它自己看到的仍然还是旧的定义包括property属性;当调用spooky对象的boo()方法时,也会发生相同的事情,所以这些调用都会重写全局的scareMe()指针;当scareMe()最后被调用的时候,它的实现已经被更新,所以从一开始就提示”Double boo!“,再也看不到scareMe.property了。