JavaScript 之 Function
JavaScript function 语句定义和用法:
function 语句用于声明一个函数。
函数声明后,我们可以在需要的时候调用。
在 JavaScript 中,函数是对象,函数也有属性和方法。
函数也可以通过表达式定义。
1、Function*
function* 这种声明方式(function关键字后跟一个星号)会定义一个生成器函数
(generator function),它返回一个  Generator  对象。
其语法为:
function* name([param[, param[, ... param]]]) { statements }
name 函数名
param 要传递给函数的一个参数的名称,一个函数最多可以有255个参数。
statements 普通JS语句。
例子:
 function* fn() {
         console.log(1);
         //暂停!
         yield;
         //调用next方法继续执行
         console.log(2);
     }
     var iter = fn();
     iter.next(); //
     iter.next(); //
1、函数生成器特点是函数名前面有一个‘*’
2、通过调用函数生成一个控制器
3、调用next()方法开始执行函数
4、遇到yield函数将暂停
5、再次调用next()继续执行函数
2、Arrowfuction
箭头函数表达式的语法比函数表达式更短,并且没有自己的this,arguments,super或 new.target。
这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。
基础语法
 (参数1, 参数2, …, 参数N) => { 函数声明 }
 (参数1, 参数2, …, 参数N) => 表达式(单一)
 //相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
 // 当只有一个参数时,圆括号是可选的:
 (单一参数) => {函数声明}
 单一参数 => {函数声明}
 // 没有参数的函数应该写成一对圆括号。
 () => {函数声明}
它的定义用的就是一个箭头:
x => x * x 
上面的箭头函数相当于:
function (x) { return x * x; }
不会用到关键字‘function’
箭头函数与普通函数的区别:
a、构造函数词法上的差异:箭头函数拥有:arguments, super, this 和 new.target。
b、由于箭头函数没有 [[Construct]] 内部方法,因此,它将不能用作构造函数。如果使用了 new 关键字创建新的函数,则会抛出错误。
3、constructor vs. dodaration vs. expression
构造函数 表达式 实例化
1、 构造函数: 
在js中本质上不存在构造函数,只存在函数的构造调用。 
如果一个函数被new调用了,那么我们就可以称被调用的那个函数是构造函数.。 
代码:
//Foo是构造函数,而且是自定义的构造函数
function foo(name,age){
this.name=name;
this.age=age;
// 构造函数的最后一行一般都会有return this
// return this;
2、函数实例化:
//p是构造函数Person的实例对象。
var p = new Person();
p.name="damu";
3、函数表达式 
function 关键字可以用来在一个表达式中定义一个函数。
 var getName = function () {
 alert (4);
 };
4、Scop Closure
scope(作用域)closure(闭包)
什么是域?
在JavaScript里,域指的是代码当前的上下文语境。域可以是公共定义的,也可以是本地定义的。
闭包:
闭包和词法作用域非常相近。一个关于闭包如何工作的更好或者更实际的例子就是返回一个函数的引用。
我们可以返回域中的东西,使得它们可以被其父域所用。
当你在函数里声明一个变量时,你只能在函数内访问。这些变量的作用域就被限制在函数里了。
如果你在一个函数内又定义了内部函数,那么这个内部函数就被称作闭包。它仍可以访问外部函数的作用域。
------------------------- 
部分内容摘自:
https://blog.csdn.net/TDCQZD/article/details/81916103
https://www.cnblogs.com/front-Thinking/p/4317020.html
JavaScript 之 Function的更多相关文章
- JavaScript笔记 Function
		
在JavaScript中方法由两部分组成: 方法名和方法体. JavaScript中的方法跟其他传统面向对象语言不同,它跟普通的变量没有区别,唯一不同点是它是Function对象,因此它会有一些Fun ...
 - (转)深入理解javascript的function
		
原文:http://www.cnblogs.com/sharpxiajun/archive/2011/09/16/2179323.html javascript笔记:深入理解javascript的fu ...
 - javascript的Function 和其 Arguments
		
http://shengren-wang.iteye.com/blog/1343256 javascript的Function属性:1.Arguments对象2.caller 对调用单前函数的Func ...
 - JavaScript之Function函数深入总结
		
整理了JavaScript中函数Function的各种,感觉函数就是一大对象啊,各种知识点都能牵扯进来,不单单是 Function 这个本身原生的引用类型的各种用法,还包含执行环境,作用域,闭包,上下 ...
 - JavaScript Nested Function 的时空和身份属性
		
JavaScript 的function 不仅仅是一等公民,简直就是特殊公民.它有许多独特的特征: 1) 它是object,可以存储,传递,附加属性. 2) 它可以有lexical closure, ...
 - Javascript中Function,Object,Prototypes,__proto__等概念详解
		
http://anykoro.sinaapp.com/2012/01/31/javascript%E4%B8%ADfunctionobjectprototypes__proto__%E7%AD%89% ...
 - javascript 之Function对象的apply(),call(),bind(),方法和arguments,caller,length属性
		
注:这篇文章原文:http://www.jb51.net/article/30883.htm 自己作为学习,重新写写. 一.写在前面的话 前端javascript编程还只是略懂皮毛,DOM知道一点,j ...
 - 转载 javascript中(function($){...})(jQuery)写法是什么意思
		
javascript中(function($){...})(jQuery)写法是什么意思 这里实际上是匿名函数function(arg){...}这就定义了一个匿名函数,参数为arg 而调用函数 ...
 - JavaScript 之 function函数及参数arguments
		
JavaScript用function关键字声明函数,可以用return返回值,也可以没有返回值. 建议:要么统一有返回值,要么统一都没有返回值,这样调试代码方便. 函数定义格式: function ...
 - javascript 中function(){},new function(),new Function(),Function 摘录
		
函数是JavaScript中很重要的一个语言元素,并且提供了一个function关键字和内置对象Function,下面是其可能的用法和它们之间的关系. function使用方式 var foo01 = ...
 
随机推荐
- tools.sublime.ConvertToUTF8
			
sublime乱码,GBK乱码,安装插件ConvertToUTF8 下载ConvertToUTF8,解压,文件夹命名为ConvertToUTF8 sublime->Preferences-> ...
 - uboot的环境变量
			
https://www.cnblogs.com/biaohc/p/6398515.html uboot 环境变量实现原理: 首先我们先要搞清楚uboot中环境变量的作用,uboot中环境变量的作用就是 ...
 - 034、Java中自增之++在前面的写法
			
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
 - delphi中json转dataset
			
unit uJSONDB; interface uses SysUtils, Classes, Variants, DB, DBClient, SuperObject, Dialogs; type T ...
 - java基础源码 (6)--ArrayListt类
			
原作出处:https://www.cnblogs.com/leesf456/p/5308358.html 简介: 1.ArrayList是一个数组队列,相当于动态数组.与java中的数组相比,它的容量 ...
 - B. Yet Another Crosses Problem
			
B. Yet Another Crosses Problem time limit per test 2 seconds memory limit per test 256 megabytes inp ...
 - 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II
			
题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
 - UVA - 1451 Average (斜率优化)
			
题意:由01组成的长度为n的子串,AT由0表示,GC由1表示,求一段长度大于等于L且GC率最高的子串的起始终止坐标,若GC率相同,取长度较小,若长度相同,取起始坐标最小. 分析: 1.一个子串(i+1 ...
 - nodejs —— 流追加数据
			
在写入流的文档后添加 ,{ 'flags': 'a' } 即可 : var fs = require('fs') var readerStream ...
 - 配置多个数据源datasource
			
https://www.jianshu.com/p/34730e595a8c @Primary.@Qualifire.@Autowired.@Resource https://blog.csdn.ne ...