javascript快速学习一:头等公民“函数”

      由于最近一段时间的javascript的火爆,不去好好学习javascript都不好意思说自己是搞开发的,围绕javascript的nodejs,coffeescript,typescript等都已经成为程序员嘴边最火热的词汇,同时由于javascript自身诞生的一些偶然因素加之时代的发展,出色的程序员们更是将许多优秀的思想加了进来使得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();

你可能感兴趣的:(JavaScript)