Function 类型
2018-06-24 00:32:47来源:未知 阅读 ()
最有意思的函数
有意思的根源在于- 函数也是对象,同样有拥有属性和方法。
由于函数是是对象,那么函数名也就相当于指向函数对象的指针
通常函数是由"函数声明"创建:
1 function(sum1,sum2){
2 reutnr sum1 + sum2;
3 }
也可以使用"函数表达式"创建:
1 var sum = function(sum1,sum2){
2 return sum1+sum2;
3 };
还有一种方式使用"构造函数"创建: (但不推荐)
//这种方式,会导致两次解析代码,第一次解析常规的代码,第二次解析传入构造函数中的字符串。
1 var sum = new Function("sum1","sum2","return sum1+sum2")
"函数声明"与"函数表达式"的区别在于:
- 函数表达式没有函数名
- 函数表达式需要分号结尾
拥有多个函数名的函数
上面提到,函数是对象,而函数名仅仅是执行函数对象的指针。
这代表着,通过将函数名赋值给其他变量,其他变量则也可以通过自身调用该函数。
注意: 访问函数对象指针时,则需要带小括号,如上面函数访问 sum 函数的指针
则需要将 sum 赋值给一个变量,该变量便可拥有指向同等函数的指针。
eg: var sum1 = sum; // sum(); sum1(); 执行的结果相同
强调: 使用 "函数名+()",代表着调用该函数, 不添加 "()",则代表访问该"指向该函数对象的指针"
将函数名设置为 null ,则可以使其指向的函数断绝联系。
eg: sum = null; // sum(); 则会报错,提示sum不是一个函数, null代表着空对象指针
函数没有重载
相同的函数名,后者会替换前者(函数声明或者函数表达式都是如此,这里以函数声明为例子)
eg: function sum(sum1){ return sum1+ 100 }
function sum(sum2){ return sum2+ 200 }
sum(100); // 300;
函数声明与函数表达式的区别
js解析器在对于这两者是由区别的。
函数声明的函数,在开始执行代码之前,就会通过函数声明提升的过程,读取并将函数声明添加到执行环境中。
即使函数在调用函数后面,也不会影响函数求值。
而函数表达式则不会,解析器必须执行到当前代码块才会被初始化并执行。如果调用在前,则
作为值的函数
在JS中,函数名本身就是变量。所以函数也可以作为值来使用。
也就是说,不仅仅可以作为一个函数的参数,也可以作为一个函数的返回值。
而sort() 方法只能根据 tostring() 的值来排序
1 eg: var data = [{name:'A',age:2},{name:'B',age:1}]
2 // 创建指定属性的函数
3 function setAttr(name){
4 return function(o1,o2){
5 var v1 = o1[name];
6 var v2 = o2[name];
7
8 if (v1 < v2) { return -1; }
9 else if(v1 > v2) { return 1; }
10 else { return 0; }
11
12 }
13 }
14 //使用sort()方法调用
15 data.sort(setAttr('age')); // [{name,:'B',age:'1'},{name:'A',age:'2'}]
16 data.sort(setAttr('name')); // [{name:'A',age:'2'},{name,:'B',age:'1'}]
函数的属性
每个函数都包含两个属性: length, prototype;
length : 表示函数接收的参数个数。
1 eg: funciont sum(test){} //sum.lenght == 1;
prototype: 在JS中,该属性是保存所有实例方法的真正所在。
在创建自定义引用类型以及实现继承时,该属性是非常重要的。
prototype: 属性是不可枚举的,因此不能使用for in发现。
通过构造函数的 prototype 属性,创建的方法或者属性,都会被它的实例对象所继承,从而实现继承机制。
函数的方法
每个函数都包含两个非继承而来的方法: apply() 与 call();
两者区别在于,第二个参数的不同。
该方法强大在于,可以扩充函数赖于运行的作用域。
apply(): 第一参数是在其中运行函数的作用域,另一个是参数数组。
call() : 第一参数是在其中运行函数的作用域,其他参数直接传递给函数,
也就是除第一个参数,其他都是逐个列举出来。
使用场景: 两者结果没有任何区别,而具体使用哪个,则取决于你传入的参数使用哪个方法方便。
如果传入参数是一个数组则使用 apply 更合适一点,否则 call() 更合适一点。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:完美实现身份证校验 js正则
下一篇:Node做中转服务器,转发接口
- 浅谈JS的基础类型与引用类型 2020-02-29
- JavaScript基础知识之数据类型 2019-10-12
- JavaScript之引用类型介绍 2019-10-12
- 背景线条实现 2019-08-14
- JavaScript之基本包装类型 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash