总结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 相关文章推荐
Javascript 读书笔记索引贴
Jan 11 Javascript
Google排名中的10个最著名的 JavaScript库
Apr 27 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
javascript实现加载xml文件的方法
Nov 24 Javascript
javascript表单事件处理方法详解
May 15 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
微信小程序 网络API Websocket详解
Nov 09 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
Jul 10 Javascript
浅谈函数调用的不同方式,以及this的指向
Sep 17 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 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程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php画图实例
2014/11/05 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
Python装饰器结合递归原理解析
2020/07/02 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
公务员职业生涯规划书范文  
2014/01/19 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
亲子活动总结
2014/04/26 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
大学学生会竞选稿
2015/11/19 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python