函数一等公民

函数

return 关键字

相当于我准备了一个返回结果,调用就是这个结果本身,如何使用,是你的事

function sum(num1, num2) {
    return num1 + num2;
  }
  console.log(sum(1, 5));  //6
  

return关键字,退出当前函数,后面的函数代码不再执行

严格模式对函数有以下限制

  • 不能把函数命名为 eval 或 arguments; 不能把参数命名为 eval 或 arguments; 不能出现两个命名参数同名的情况

函数的参数

函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不 会有什么怨言。之所以会这样,原因是 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收 到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任 何元素,无所谓;如果包含多个元素,也没有问题。

arguments

表示函数参数的一个类数组,并且只能在海曙的内部访问

function sayHi() { 
 alert("Hello " + arguments[0] + "," + arguments[1]); 
}

我们可以利用这一点为同一个函数实现不同的功能

function doAdd() { 
  if(arguments.length == 1) { 
  alert(arguments[0] + 10); 
  } else if (arguments.length == 2) { 
  alert(arguments[0] + arguments[1]); 
  } 
} 
doAdd(10); //20 
doAdd(30, 20); //50

函数的覆盖性

如果在 ECMAScript 中定义了两个名字相同的函数,则该名字只属于后定义的函数。请看下面的例子:

function addSomeNumber(num){ 
 return num + 100; 
} 
function addSomeNumber(num) { 
 return num + 200; 
} 
var result = addSomeNumber(100); //300

每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。ECMAScript 程序中的执行流正是由这个方便的机制控制着。

作用域链

作用域链的

作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能享受访问,访问到window对象即被终止。简单来说,作用域就是变量和函数的可访问范围

闭包

闭包指有权访问另一个函数内部变量的函数,当在函数内部定义了其他函数,也就创建了闭包

谈谈你对闭包的理解

优点:使用闭包可以模仿块级作用域,可以避免全局变量的污染,实现封装和缓存

缺点:闭包会常驻内存,造成内存泄露,解决方法是在退出函数之前,将不使用的局部变量设为null

闭包最大的两个作用

1.可以读取函数内部使用的变量,使这些变量始终保存在内存中.封装对象的私有属性,和私有方法

 

 

 

转载于:https://my.oschina.net/u/4004801/blog/3011259

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值