JavaScript的函数

函数创建的方法: 
1.函数声明

        function a(){
            函数体 
        }

2.函数表达式

        var a = function(){
            函数体
        }
        使用条件: (1)、函数当成值,赋值给变量 
                 (2)、创建了一个对象,给obj,添加一个方法 
                 (3)、当一个函数,被作为一个回调函数

3.命名函数表达式

        var a = function b(){
            函数体
            //可以访问到b函数,而在函数外面,是访问不到b的;和函数声明有很大的不同,递归中可能会用到
        }

4.箭头函数

 (a,b)=>{return a+b}
 如果只有一个参数,可以省略()
 a=>{return a++}
 如果函数体只有一条,可以省略{}
 a=> a++

5.函数生成器 ES6中

function* quips(name) {
  yield "你好 " + name + "!";
  yield "希望你能喜欢这篇介绍ES6的译文";
  if (name.startsWith("X")) {
    yield "你的名字 " + name + "  首字母是X,这很酷!";
  }
  yield "我们下次再见!";
}

普通函数使用function声明,而生成器函数使用function*声明。
在生成器函数内部,有一种类似return的语法:关键字yield。
二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。
在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。

6.函数构造器-不推荐 1、写起来太复杂2、出入的字符串需要eval解析,效率低

var a = new Function('a','b','return a+b');

函数声明,转化成立即执行函数(IIFA)的几种方法: 
立即执行函数的优点:1、解决作用域下,命名污染的问题;2、对整个程序的性能有提升,减少了对作用域的查找;3、有利于压缩;4、避免全局命名的冲突 5、保存闭包状态 6、使用UMD结构,去颠倒代码运行顺序

        // 使用操作符
        (function(){
            console.log(1111);
        })();
        (function(){
            console.log(1111);
        }());

        var a = function(){
            console.log(2222);
        }();

        true&&function(){
            console.log(3333);
        }();

        false||function(){
            console.log(4444);
        }();

        0,function(){
            console.log(5555);
        }();

        // 使用一元运算符 + - ~
        +function(){
            console.log(6666);
        }();
        -function(){
            console.log(7777);
        }();
        ~function(){
            console.log(8888);
        }();
        !function(){
            console.log(8888);
        }();

        new function(){
            console.log(9999);
        };

        一元运算符转化的效率低一些,不如操作符
posted @ 2018-08-29 09:16  邓志娇  阅读(102)  评论(0编辑  收藏  举报