JavaScript的Function 类型
一,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 类型的更多相关文章
- 浅析JavaScript之Function类型
JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地 ...
- JavaScript之Function类型
1. 创建方式 //1.函数声明 function sum(num1,num2){ return num1+num2; } //2.函数表达式 var sum = function(num1,num2 ...
- JavaScript高级 Function类型
· Function类型 (属于引用类型) 1.JS中,有的函数均是对象,这个一个非常有特点的地方.它既然是对象,那么它的构造函数是谁呢?就是Function.(例如:function Pers ...
- JavaScript笔记——引用类型之Object类型和Function类型
<JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...
- 《JavaScript高级程序设计》读书笔记 ---Function 类型
说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象.每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对 ...
- JavaScript中的Function类型浅析
1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法.正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针. 2. 常用的函数 ...
- JavaScript(第十天)【Function类型】
在ECMAScript中,Function(函数)类型实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象 ...
- Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型
JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...
- 《JavaScript高级程序设计》5.5 Function类型
5.5 Function类型 函数实质上是对象, 每个函数都是Function类型的实例, 并且都和其他引用类型一样具有属性和方法. 因此函数名实际上也是一个指向函数对象的指针, 不会与某个函数绑定. ...
随机推荐
- PHP面试题及答案解析(2)—PHP面向对象
1. 写出 php 的 public.protected.private 三种访问控制模式的区别. public:公有,任何地方都可以访问protected:继承,只能在本类或子类中访问,在其它地方不 ...
- MQTT服务器搭建--Apollo
尊重原创,我是伸手党:https://blog.csdn.net/u012377333/article/details/68943416 1.Apollo下载 下载地址:http://activemq ...
- 详细的obs操作教程(windows/mac)图解
直播推流软件obs操作配置教程包含支持mac和windows配置 1 2 3 4 5 6 7 8 9
- "fcitx按ctrl+space没反应"解决方法
如果是KDM.GDM.LightDM,打开~/.xprofile.如果是startx.Slim,打开~/.xinitrc.(没有就新建一个) export GTK_IM_MODULE=fcitxexp ...
- instagram架构分析_转
转自:http://www.eit.name/blog/read.php?504 Instagram 团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iPhone 上最火爆的图片类工具,in ...
- linux 进程线程
linux下进程的最大线程数.进程最大数.进程打开的文件数 ===========最大线程数============== linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_TH ...
- ubunut jdk 配置
sudo mv jdk1.7.0_10 /usr/lib/jvm/ sudo gedit /etc/profile 在profile中加入下面内容: export JAVA_HOME=/usr/lib ...
- Tautology - poj 3295
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10437 Accepted: 3963 Description WF ...
- python reduce & map 习题
基于廖雪峰教程作业 http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317 ...
- ProjectManager Beta 7 项目管理器发布
上次在Alpha阶段有一个可用版本Alpha 8也在这个博客发布了,传送:http://www.cnblogs.com/deali/p/ProjectManager.html ProjectManag ...