javascript快速学习一:头等公民“函数”
由于最近一段时间的javascript的火爆,不去好好学习javascript都不好意思说自己是搞开发的,围绕javascript的nodejs,coffeescript,typescript等都已经成为程序员嘴边最火热的词汇,同时由于javascript自身诞生的一些偶然因素加之时代的发展,出色的程序员们更是将许多优秀的思想加了进来使得javascript变的更加优秀也更具特色。
学习就从许多脚本语言的“头等公民”,函数开始。
函数也是数据
我们日常开发中常碰到这样的两种写法:
function f(){
return 1;
}
var f=function(){
return 1;
}
第二种叫作“函数标记法”,也是我比较喜欢的一种。
匿名函数
由于上面说了,在javascript中函数也是数据,数据我们常被用作参数传递,所以函数也可以作为参数传递,就产生了所谓的“匿名函数”。
匿名函数是因为代码本身没有赋给任何变量,也没有被赋予任何名字。
如:function(a){return a;}
匿名函数有什么好处呢?
我们可以将匿名函数作为参数传递给其他的函数消费,同时其他函数也可以用我们传递的函数完成某些事情。
想一想在C#中使用匿名函数的基础是委托,这也就解释了委托为什么出现,并可以将方法作为参数传递了。
回调示例:
function multiplyTwo(one,two,callback){
var sum=callback(one,two);
return sum;
}
自调函数
我们可能见过这样的代码:
(
function(){
alert(‘haha‘);
}
)()
看上去有些吓人,其实很简单我们暂时理解为一个匿名函数后面加了一对()就可以了,而第二个()作用就是“立即调用”,同时也是向匿名函数传参数的地方。
(
function(name){
alert(‘hello‘+name);
}
)(‘春哥‘)
使用自调函数的好处就是不会产生任何全局变量。
闭包
谈到javascript的函数就不得不说他的闭包,貌似闭包更多的是体现在脚本语言当中,第一次听说是在ruby中, 也看到很多在C#讨论闭包的情况,个人认为任何在C#面试上讨论闭包的都是耍流氓。
首先什么是闭包,翻看了N多度娘谷歌的结果,都没能找到一个易懂的定义,等多的理解是体现在其变量作用域及函数上下文上。最终看的了一个比较浅显的:
一个函数在其函数体中使用了定义该函数的父函数中的var变量,而且这个函数在父函数之外被使用。我们通常将函数fun叫做闭包,而不去刻意突出函数funParent的闭包的概念。
经典的代码就是:
function f(){
var b=‘b‘;
return function()
{
return b;
}
}
在使用时:var n=f();
n();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。