总结js函数相关知识点


Posted in Javascript onFebruary 27, 2018

要知道,在js中,引用类型是一种数据结构,包含5种引用类型,分别是Object,data,Array,re请输入代码gExp,Function。今天我们就说Function这种数据结构。

在js种函数实际上是对象,每个函数都是Function类型的实例。和其他引用类型一样,都具有属性和方法。

1. 函数定义有几种方法

1)函数声明语法定义

function sum(num1,num2){
  return num1+num2;
 }

2)函数表达式

注意函数表达式后边有一个分号;

var sum=function(num1,num2){
   return num1+num2;
}

使用Function 构造函数

使用构造函数可以接收任意数量的参数,但最后一个参数始终被看成是函数体,而前面的参数则枚举出了参数

var sum=new Function("num1","num2","return num1+num2")

当然第三种方法不友好,也不推荐。

函数名仅仅是指向函数的指针,所以函数名与包含对象指针的其他变量没有什么不同。也就是说一个函数可能会有多个名字。
在这里函数声明和函数表达式有什么区别呢?

解析器在向执行环境中加载数据的时候,对函数声明和函数表达式是不一样的。解析器首先会读取函数声明,并且使得这段函数声明代码在任何代码之前都可调用。这就是我们平时所说的函数声明提升。函数表达式不一样,他必须等到函数解析器执行到他所在的代码块的时候,才会被真正的执行。比较下面2个例子

console.log(sum(10,10));

function sum(n1,n2){
  return n1+n2;
}

以上代码会正常执行

再看!

console.log(sum(10,10));

var sum=function(n1,n2){
  return n1+n2;
}

以上执行器就会报错!

2.函数没有重载

如果声明了2个同名函数,结果是后面的函数覆盖了前面的函数。

function sun(a){
 return a+100;
}
function sun(a){
 return a+200;
}

var result=sum(2)//202

3.函数的内部属性

包括this,arguments

具体不再叙述了

4.函数的属性和方法

函数有2个属性,length和prototype

length表示函数希望接收命名参数的个数。

function a(name){
 //todo
}
function b(name,age){
 //todo
}
function c(){
 //todo
}

a.length //1
b.length //2
c.length //0

prototype属性对于引用类型来说很重要,会有专门讲解,此处不再这赘述。

每个函数都包含2个非继承的方法 apply,call

这两个方法的用途都是在特定的作用域中调用函数,其实就是设置函数体内的this指代的值。

首先。apply()方法接收2个参数,一个是函数运行的作用域,另一个是参数数组,第二个参数可以是数组的实例,也可以是arguments.

function sum(num1,num2){
  return num1+num2;
}

function test1(a,b){
  return sum.apply(this,arguments);
}

function test2(c,d){
  return sum.apply(this.[c,d]);
}

console.log(test1(1,1)) //2

console.log(test2(1,1)) //2

call方法和apply方法没有多大的区别。区别就是call方法的第二个参数必须得传递的参数一个个列举出来。

使用call和apply来扩充作用域最大的好处就是对象不和任何方法耦合

Javascript 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 Javascript
ajax与302响应代码测试
Oct 23 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
JavaScript字符串对象
Jan 14 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
在微信小程序中使用图表的方法示例
Apr 25 Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 #jQuery
详解Vue Elememt-UI构建管理后台
Feb 27 #Javascript
详解react-native WebView 返回处理(非回调方法可解决)
Feb 27 #Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 #Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 #Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 #jQuery
关于ES6箭头函数中的this问题
Feb 27 #Javascript
You might like
国内咖啡文化
2021/03/03 咖啡文化
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
深入了解Django中间件及其方法
2019/07/26 Python
python3 logging日志封装实例
2020/04/08 Python
Python json转字典字符方法实例解析
2020/04/13 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
Linux机考试题
2015/07/17 面试题
Delphi软件工程师试题
2013/01/29 面试题
大专自我鉴定范文
2013/10/23 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
带薪年假请假条
2014/02/04 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
初中班干部工作总结
2015/08/10 职场文书
检举信的写法
2019/04/10 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers