代码改变世界

JS中的几种函数

2017-04-15 11:21  心猿意‘码’  阅读(1927)  评论(0编辑  收藏  举报

函数可以说是js中最具特色的地方,在这里我将分享一下有关函数的相关知识:

包装函数:
        (function foo(){...})作为函数表达式意味着foo只能在...所代表的位置中被访问,外部作用域则不行

        (function foo(){...})()
        第一个()将函数变成表达式第二个()执行了这个函数,这种模式代表立即执行函数表达式

    包装函数的声明以(function...而不是function开始,函数会被当作函数表达式而不是一个标准的函数声明来处理
        区分函数声明和表达式最简单的方法就是看function的位置,如果是声明中的第一个词,就是函数声明,否则是函数表达式

回调函数:

 setTimeout(function(){
             console.log("i waited 10 second!");
         },10000);

         这叫做匿名函数表达式,因为function()...没有名称标识符,所以函数表达式是匿名的,而函数声明不可以省略函数名,在JS中是非法的

匿名函数的几个缺点:
        #匿名函数在栈追踪中不会显示出有意义的函数名,使得调试困难
        #没有函数名,当函数需要引用自身时只能使用已经过期的 arguments.callee引用;比如在递归中,另一个函数需要引用自身的例子,是在事件触发后事件监听器需要解绑自身
        #匿名函数省略了对于代码的可读性