一,Function定义

  Function实际上是对象,与其他引用类型一样具有属性和方法。Function可以通过三种方法进行定义,分别是函数声明语法定义,函数表达式定义和Function构造函数定义。

  1.函数声明语法定义

function functionName(value1...){//函数体
}

  2.函数表达式定义

var functionName = function(value1...){//函数体
}

  3.Function构造函数定义

  通过Function构造函数创建函数,可向构造函数中传入任意数量的参数,但值得注意的是传入的最后一个参数会作为函数体,而其他参数则作为参数传入函数中。用该方法去定义函数是不推荐使用的,因为该语法会导致解析两次代码,第一次解析常规ECMAScript代码,第二次解析传入构造函数的字符串,影响性能。

var functionName = new Function("value",...,"函数体");

  注:函数是引入值类型,所以函数名仅仅是指向函数的指针,当使用函数名去赋值给另一个变量名时,仅仅复制的是一个指针。即在下列a设置为null时,仅将a存的指针消除而已,不会影响b调用函数。

var a = b = function(value1){return value1;
}
a = null;
b(1);

二、函数的重载

  函数本身是没有重载的,因为在JavaScript中,函数可接收任意个参数,故不会因参数数量不同而发生函数重载。但可以通过特殊的写法实现函数重载。

  思路:利用函数内部属性arguments.length去判断,进行传入不同参数的不同处理,从而实现函数的重载。

三、函数声明与函数表达式的区别

  解析器对这两种定义函数方法的解析是不一样的。解析器会将函数声明的函数优先解析,使其在代码执行前可用(函数声明提前)。而函数表达式会在执行到该行代码才会被解析。

四、闭包
  面试题:将数组中的对象,按某个属性进行排序。

  思路:利用数组的sort()接收一个对比函数,该对比函数是另一个函数的返回值。

var arr = [{name:"lyf",age:20},{name:"gulu",age:18}];
function nameSort(name){return function(obj1,obj2){return obj1[name]-obj2[name];}
}
arr.sort(nameSort("age"));

五、函数内部属性

  1.arguments:包含函数所有参数的伪数组。

          其arguments.callee属性指向含有该arguments对象的函数。该属性可用于递归函数的函数调用。

  例:一个阶乘函数的写法。

function factorial(num){if(num<=1){return 1;}else{return num*arguments.callee(num-1);}
}//好处:低耦合

  2.this:函数执行的环境变量。

  3.caller:调用当前函数的函数引用。

  例:

function a(){console.log(a.caller);//指向调用a的b
}
function b(){a();
}
b();

六、函数的属性和方法

  1.length:该属性指定义函数时,需要传入参数的个数。使用为:函数名.length;

  2.prototype:原型函数。

  3.apply和call:方法均改变调用函数的环境对象,简而言之就是改变函数的this值。两者除了传入参数的方式不同外,没有什么区别。apply在传参时,可传入数组或伪数组arguments,call是将参数依次列出传入函数的,具体看以下语法。

    apply(环境对象,[value1,...])或apply(环境对象,arguments)。

    call(环境对象,value1,value2...)

  4.bind()

    创建一个函数实例,其this值会被绑定到传给bind()函数的值。

window.age = 20;
var lizi = {age:18};
function sayAge(){alert(this.age);
}
var say = sayAge.bind(lizi);
say();//18

转载于:https://www.cnblogs.com/whiteMu/p/7399719.html

JavaScript的Function 类型相关推荐

  1. JavaScript之function类型

    每个函数都是function类型的实例 function name() var name= function() 转载于:https://www.cnblogs.com/anderson0/p/482 ...

  2. JavaScript面向对象之Function类型

    JavaScript面向对象之Function类型 下面是我对Function类型的总结,希望对您有帮助. "函数式编程"是一种"编程范式"(programmi ...

  3. 《JavaScript高级程序设计 (第3版)》学习笔记14:chapter_5 - 5 Function类型

    这是第14篇笔记! 让学习"上瘾",成为更好的自己! <!DOCTYPE html> <html lang="en"> <head ...

  4. 理解JavaScript的原始类型

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript中的原始类型(primitive type)包括Undefined.Null.Number.Boolean ...

  5. java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别

    [Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...

  6. JavaScript学习总结(七)——JavaScript函数(function)

    转载自   JavaScript学习总结(七)--JavaScript函数(function) 一.函数基本概念 为完成某一功能的程序指令(语句)的集合,称为函数. 二.JavaScript函数的分类 ...

  7. javascript检测浏览器类型和版本号(兼容各浏览器)

    代码  1 from: http://www.webreference.com/tools/browser/javascript.html  2 http://browserspy.dk/browse ...

  8. 利用Javascript判断操作系统的类型

    在通过Javascript实现客户端和服务端的交互时,有时候需要对操作系统进行判断,以便实现不同操作系统下的兼容性,比如:我们有一个网站, 在Windows XP下浏览效果良好,但是到了Ubuntu下 ...

  9. 如何用mshtml获得Javascript中function的返回值[mshtml]

    marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/ ...

最新文章

  1. 计算机网络协议分层体系结构
  2. 关于Spring 国际化 No message found under code 的解决方案
  3. 四川省天然气行业发展战略及投资形势分析报告2021版
  4. echo中使用逗号和句号的区别
  5. eureka自我保护功能
  6. 【会议】2009-11-13
  7. Codeforces 558(C、D、E)总结
  8. 三个月可更改用户昵称两次
  9. 企业中个别机械类制图软件无法打印的问题汇总
  10. 主板插槽接口相关释义
  11. 【读书笔记】《软件方法(上)业务建模和需求》(第2版)习题答案
  12. java倒序输出英文句子_Java实现英文句子中的单词顺序逆序输出的方法
  13. 光功率计(Optical power meter)
  14. unity物体自身轴旋转_Unity 中物体的旋转
  15. RabbitMQ核心功能介绍
  16. 华为服务器磁盘没显示不出来,服务器磁盘读取不了
  17. TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言
  18. 量子计算机 大数分解,关于大数分解问题的研究
  19. Filenet P8阶段性总结
  20. 菜谱点菜c语言编程,菜单点菜并计算价格 C++改成C 运行成功100分

热门文章

  1. 教职工使用计算机管理制度,教师配置笔记本电脑管理办法
  2. 最长回文子串manacher算法模板
  3. python图书馆预约系统_python实现图书馆研习室自动预约功能
  4. usb转rj45_超薄本也能有线上网,只需一个USB转网口小工具
  5. windows通信端口初始化失败_STM32实例——USART串口通信实验(二)
  6. UnityShader19.1:渲染纹理(下)之GrabPass
  7. 2017 ACM-ICPC南宁网络赛: I. GSM Base Station Identification(线性变换)
  8. k8s集群中 spark访问hbase中数据
  9. jQuery Mobile中弹窗popup的data-*选项
  10. 尝试:以下矩阵size length ndims repmat isempty ismatix E=A(:,[1:3:5])什么意思?