函数定义功能汇总 (箭头函数、函数生成器声明等)

今天偶的发现一个新鲜的生成器函数,故此查询到了所有的函数声明定义的相关资料。供以后参考,累积。。

主要包括:函数声明  函数表达式 生成器函数声明 生成器函数表达式 箭头函数表达式 几大类

一 、 函数声明 (function声明)

声明函数有一种特殊的语法:

函数名称([ param [, param [,... param]]]){  statements }

name 功能名称       

param 要传递给函数的参数的名称         

statements包含功能主体的陈述

二 、 函数表达式(function表达式)

function [ name ] ([ param [, param [, ... param ]]]) { statements}

name     功能名称,可以省略,在这种情况下,该函数称为匿名函数

param       要传递给函数的参数的名称

statements         包含功能主体的陈述

1)匿名函数

var myFunction = function() {
    statements
}

2)命名函数 

var myFunction = function namedFunction(){
    statements
}

命名函数表达式的好处是当我们遇到错误时,堆栈跟踪会显示函数名,容易寻找错误。

3)IIFE (Immediately Invokable Function Expressions)

(function(){
    statements
})()

立即执行函数只使用一次

三、 函数生成器声明 (function* 语句)

function*  name([ param[, param[, param]]]) { statements }

name            函数名称

param           传递给函数的参数的名称,一个函数最多可以有255个参数

statements    组成函数体的声明语句

因为这种声明语句不常见到,故此给出example,加深大家的映象

function* foo(){
	yield 'a',
	yield 'b',
	yield 'c';
}

var str = '';
for (let val of foo()){
	str = str + val;
}
console.log(str)

四、 箭头函数表达式 (=>)

1)  箭头函数表达式有着更短的语法,并在词汇方面结合这个值.

([param] [,param]) => { statements }  param => expression

param           参数名称  无参数需要用()表示,只有一个参数时不需要括号。(例如 foo => 1)

statements or expression        多个声明statements需要用大括号括起来,而单个表达式不需要。表达式expression也是该函数的隐式返回值

基本语法:

<span style="color:#333333">(param1,param2,...,paramN)=> {statements} 
(param1,param2,...,paramN)=>表达式
//等价于:=> {return expression; }

//当只有一个参数名称时,括号是可选的:
(singleParam)=> {statements}
singleParam => {statements}

//没有参数的函数的参数列表应该用一对括号写。
()=> {statements}</span>

高级语法:

<span style="color:#333333">//括号化函数体以返回对象文字表达式:
params =>({foo:bar}) 

// <a data-cke-saved-href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">其余的力学参数</a>和<a data-cke-saved-href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters">默认参数</a>都支持
(param1,param2,... rest)=> {statements} 
(param1 = defaultValue1,param2,...,paramN = defaultValueN)=> { 
陈述} 

// <a data-cke-saved-href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">解构</a>的参数列表中也支持
var f =([a,b] = [1,2],{x:c} = {x:a + b})=> a + b + c;
F(); // 6</span>

 2) example1

var materials =  [
	'Rydrogen',
	'Relium',
	'Lithium',
	'Reryllium'
],

console.log(material.map(material => material.length)),

3) example2

var elements = {
	'Hydrogen',
	'Helium',
	'Lithium',
	'Beryllium'
};

elements.map(function(element ) {
	return element.length;
});

elements.map(elememt => element.length);

elements.map(({ length }) => length);

4) 箭头函数没有单独的this

function Person() {
  var that = this;
  that.age = 0;

  setInterval(function growUp() {
    // The callback refers to the `that` variable of which
    // the value is the expected object.
    that.age++;
  }, 1000);
}


function Person(){
  this.age = 0;

  setInterval(() => {
    this.age++; // |this| properly refers to the Person object
  }, 1000);
}

var p = new Person();

 

五、Function 构造函数

new Function (arg1arg2, ... argNfunctionBody)

这就不做多的解析了........

六、生成器函数的构造函数

new GeneratorFunction (arg1arg2, ... argNfunctionBody)

注意: 不推荐使用构造器函数的构造函数 (GeneratorFunction constructor)创建函数,因为它需要的函数体作为字符串可能会阻止一些JS引擎优化,也会引起其他问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值