一,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();//

JavaScript的Function 类型的更多相关文章

  1. 浅析JavaScript之Function类型

    JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地 ...

  2. JavaScript之Function类型

    1. 创建方式 //1.函数声明 function sum(num1,num2){ return num1+num2; } //2.函数表达式 var sum = function(num1,num2 ...

  3. JavaScript高级 Function类型

    ·    Function类型 (属于引用类型) 1.JS中,有的函数均是对象,这个一个非常有特点的地方.它既然是对象,那么它的构造函数是谁呢?就是Function.(例如:function Pers ...

  4. JavaScript笔记——引用类型之Object类型和Function类型

    <JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...

  5. 《JavaScript高级程序设计》读书笔记 ---Function 类型

    说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象.每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对 ...

  6. JavaScript中的Function类型浅析

    1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法.正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针. 2. 常用的函数 ...

  7. JavaScript(第十天)【Function类型】

    在ECMAScript中,Function(函数)类型实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象 ...

  8. Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型

    JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...

  9. 《JavaScript高级程序设计》5.5 Function类型

    5.5 Function类型 函数实质上是对象, 每个函数都是Function类型的实例, 并且都和其他引用类型一样具有属性和方法. 因此函数名实际上也是一个指向函数对象的指针, 不会与某个函数绑定. ...

随机推荐

  1. 【HttpClient4.5中文教程】【第一章 :基础】1.1运行请求(二)

    很多其它HttpClient4.5中文教程请查看:点击打开链接 ==================================================================== ...

  2. sprint3 【每日scrum】 TD助手站立会议第八天

    站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 调整闹钟和整个项目的显示效果,最后做出了微信界面滑动的显示效果 整合原来做过的功能,并做相应的改进,整合其他的功能 在界面的设计和用户交互上始 ...

  3. CSRF介绍与应对以及Java代码示例

    详细信息看这里:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 简介 CSRF(Cross Site Request Forg ...

  4. route 命令

    Linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或 ...

  5. centos 防火墙开放80端口

    辛辛苦苦编译安装完Ngnix,mysql ,PHP,后发现不能访问,后来发现是防火墙把80端口给禁用了.开启之:(以下参考自:http://llhdf.javaeye.com/blog/526176) ...

  6. html自定义标签属性

    <a href="#" _asd="xxxx" onclick="test(event)">test</a> < ...

  7. 传统数据仓库架构与Hadoop的区别

    一, 下面一张图为传统架构和Hadoop的区别 主要讲以下横向扩展和扩展横向扩展:(Mpp 是hash分布,具有20节点)添加新的设备和现有的设备一起提供负载能力.Hadoop中系统扩容时,系统平台增 ...

  8. Tomcat startup.bat启动隐藏弹出的信息窗口

    to make tomcat to use javaw.exe instead of java.exe using some startup parameter or environment vari ...

  9. PHP-Manual的学习----【语言参考】----【基本语法】

    2017年6月28日11:29:311.当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码.此种解析方式使得 PHP ...

  10. Lumen开发:lumen源码解读之初始化(1)——app实例

    版权声明:本文为博主原创文章,未经博主允许不得转载. 有些注释来着原文的百度翻译,可以有些难理解或者奇怪,我后面会根据自己的理解做调整的哈!!!不喜勿喷,层主英语不过关... 先来看看入口文件publ ...