总结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图片阅览组件
Nov 09 Javascript
jQuery使用技巧简单汇总
Apr 18 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
Mar 08 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
深究AngularJS中$sce的使用
Jun 12 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
Jul 30 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
微信小程序 textarea 层级过高问题简单解决方案
Oct 14 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中几个常用的魔术常量
2012/02/23 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP文件操作详解
2016/12/30 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
Python中的time模块与datetime模块用法总结
2016/06/30 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
python 发送get请求接口详解
2020/11/17 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
校领导推荐信
2013/11/01 职场文书
颁奖晚会主持词
2014/03/25 职场文书
销售辞职信范文
2015/03/02 职场文书
年度考核表个人总结
2015/03/06 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python