JavaScript 之 Function

 

JavaScript function 语句定义和用法:

 

function 语句用于声明一个函数。

 

函数声明后,我们可以在需要的时候调用。

 

在 JavaScript 中,函数是对象,函数也有属性和方法。

 

函数也可以通过表达式定义。

 

 

1、Function*

function* 这种声明方式(function关键字后跟一个星号)会定义一个生成器函数 

(generator function),它返回一个  Generator  对象。

其语法为:

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

name 函数名

 

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

 

statements 普通JS语句。

例子:

 1 function* fn() {
 2         console.log(1);
 3         //暂停!
 4         yield;
 5         //调用next方法继续执行
 6         console.log(2);
 7     }
 8     var iter = fn();
 9     iter.next(); //1
10     iter.next(); //2

 

  1、函数生成器特点是函数名前面有一个‘*’

 

  2、通过调用函数生成一个控制器

 

  3、调用next()方法开始执行函数

 

  4、遇到yield函数将暂停

 

  5、再次调用next()继续执行函数

 

 

2、Arrowfuction

箭头函数表达式的语法比函数表达式更短,并且没有自己的this,arguments,super或 new.target。

这些函数表达式更适用于那些本来需要匿名函数的地方,并且它们不能用作构造函数。

基础语法

 1 (参数1, 参数2, …, 参数N) => { 函数声明 }
 2 (参数1, 参数2, …, 参数N) => 表达式(单一)
 3 //相当于:(参数1, 参数2, …, 参数N) =>{ return 表达式; }
 4 
 5 // 当只有一个参数时,圆括号是可选的:
 6 (单一参数) => {函数声明}
 7 单一参数 => {函数声明}
 8 
 9 // 没有参数的函数应该写成一对圆括号。
10 () => {函数声明}

它的定义用的就是一个箭头:

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调用了,那么我们就可以称被调用的那个函数是构造函数.。
代码:

1 //Foo是构造函数,而且是自定义的构造函数
2 function foo(name,age){
3 this.name=name;
4 this.age=age;
5 // 构造函数的最后一行一般都会有return this
6 // return this;

2、函数实例化:

1 //p是构造函数Person的实例对象。
2 var p = new Person();
3 p.name="damu";

3、函数表达式
function 关键字可以用来在一个表达式中定义一个函数。

1 var getName = function () { 
2 alert (4);
3 };

 

 

4、Scop Closure

scope(作用域)closure(闭包)

什么是域?

在JavaScript里,域指的是代码当前的上下文语境。域可以是公共定义的,也可以是本地定义的。

闭包:

闭包和词法作用域非常相近。一个关于闭包如何工作的更好或者更实际的例子就是返回一个函数的引用。

我们可以返回域中的东西,使得它们可以被其父域所用。

当你在函数里声明一个变量时,你只能在函数内访问。这些变量的作用域就被限制在函数里了。

如果你在一个函数内又定义了内部函数,那么这个内部函数就被称作闭包。它仍可以访问外部函数的作用域。

------------------------- 
部分内容摘自:

https://blog.csdn.net/TDCQZD/article/details/81916103 

https://www.cnblogs.com/front-Thinking/p/4317020.html

posted @ 2018-11-12 02:18  墨西哥郊外的晚上*  阅读(183)  评论(0编辑  收藏  举报