总结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 面向对象全新理练之数据的封装
Dec 03 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
May 28 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
Aug 24 Javascript
jquery分隔Url的param方法(推荐)
May 25 Javascript
JQuery和PHP结合实现动态进度条上传显示
Nov 23 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
Feb 15 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
Apr 28 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 Javascript
es5 类与es6中class的区别小结
Nov 09 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中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
URL地址中的#符号使用说明
2011/02/12 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
python 测试实现方法
2008/12/24 Python
使用Python实现一个简单的项目监控
2015/03/31 Python
详解Python中for循环的使用方法
2015/05/14 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
解决python删除文件的权限错误问题
2018/04/24 Python
python把1变成01的步骤总结
2019/02/27 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python字符串的修改方法实例
2019/12/19 Python
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
企业职业病防治方案
2014/05/29 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
服务行业演讲稿
2014/09/02 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
小学优秀教师材料
2014/12/15 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
2015年计划生育责任书
2015/05/08 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
德劲DE1108畅想
2021/04/22 无线电
JavaScript实例 ODO List分析
2022/01/22 Javascript