总结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 相关文章推荐
JS与jQuery遍历Table所有单元格内容的方法
Dec 07 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
Jan 11 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
Vue异步组件处理路由组件加载状态的解决方案
Sep 07 Javascript
js比较两个单独的数组或对象是否相等的实例代码
Apr 28 Javascript
Vue项目服务器部署之子目录部署方法
May 12 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
Sep 06 Javascript
js实现坦克大战游戏
Feb 24 Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 Javascript
JavaScript实现tab栏切换效果
Mar 16 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
Jul 20 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
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
JS重载实现方法分析
2016/12/16 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
python插入排序算法的实现代码
2013/11/21 Python
python如何定义带参数的装饰器
2018/03/20 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python中必要的名词解释
2019/11/20 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
数控技术应用个人求职信范文
2014/02/03 职场文书
户外拓展活动方案
2014/02/11 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL