
JavaScript Function类型 小抄
发布日期:2021-05-16 17:58:09
浏览次数:18
分类:精选文章
本文共 2495 字,大约阅读时间需要 8 分钟。
ECMAScript 函数类型深入解析
ECMAScript 中,函数是最有趣的对象之一。任何函数都是一个 function 对象的实例,既有属性又有方法。这意味着函数名实际上只是指向 function 对象的变量指针,不会因为名字改变而影响函数本身。
函数的声明
函数声明语法
函数可以通过 function
关键字声明:
function sum(sum1, sum2) { return sum1 + sum2;}
或者用函数表达式定义:
var sum = function(sum1, sum2) { return sum1 + sum2;}
还可以用构造函数定义:
var sum = new Function("sum1", "sum2", "return sum2 + sum1"); // 不推荐使用
由于函数名只是指针变量,即使重命名也不会真正重载函数,因为函数名是一个变量,只是指向函数对象的新值。
函数声明与解析
函数声明与函数表达式的区别在于声明时函数对象会立即被添加到执行环境中,而函数表达式只有在调用时才被解析。
函数作为值的使用
函数名本身是变量,因此函数也可以作为值使用。除了传递给其他函数,函数还能作为返回值:
// 比较对象属性function createComparFun(propertyName) { return function(object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value1 < value2) return -1; if (value1 > value2) return 1; return 0; };}var data = [{ name: "zachary", age: 28 }, { name: "Nicholas", age: 29 }];data.sort(createComparFun("name"));alert(data[0].name);data.sort(createComparFun("age"));alert(data[0].name);
函数内部属性
函数内部有两个特殊对象:
- arguments:是一个类数组对象,包含所有传入函数的参数。
- this:引用函数执行时的作用域对象。
arguments 对象
arguments 有一个特殊属性 callee,指向定义该 arguments 对象的函数。
function factorial(num) { if (num <= 1) return 1; return num * factorial(num - 1);}
传统方式调用可能会因为函数名改变而失败,但可以使用 arguments.callee
实现安全递归:
function factorial(num) { if (num <= 1) return 1; return num * arguments.callee(num - 1);}
this 对象
this 的行为与 Java、C# 等类似,表示调用函数的环境对象。例如:
// 全局调用window.color = "red";var o = { color: "blue" };function sayColor() { return this.color;}o.sayColor = sayColor;// 全局调用 this 是 windowalert(sayColor());// 对 o 调用 sayColor this 是 oalert(o.sayColor());
函数的属性与方法
每个函数有以下属性:
- length:表示命名参数的个数。
- prototype:用以存储实例方法,通过 toString() 或 valueOf() 访问。
函数还具有两个内置方法:
- apply() 和 call():用于在特定作用域中执行函数。
- bind():将 this 绑定到指定对象。
基本使用示例
function sum(num1, num2) { return num1 + num2;}function callSum(number1, number2) { return sum.apply(this, arguments); // apply 接受执行函数的作用域和参数数组}function callAgain(num1, num2) { return sum.call(this, num1, num2);}// 确保 call 的参数被逐个传递alert(callSum(100,99)); // 199alert(callAgain(800, 200)); // 1000
使用 call() 和 apply()
window.color = "red";var o = { color: "blue" };function sayColor() { alert(this.color);}// 全局调用sayColor(); // this 是 window,输出 redsayColor.call(this); // 输出 redsayColor.call(o); // 输出 blue// 使用 bind 绑定 thisvar TheSayColor = sayColor.bind(o);TheSayColor(); // 输出 blue
通过 call() 和 apply(),我们可以灵活管理函数的执行作用域,而无需将函数加入对象中。
总结
通过以上介绍,我们知道函数在 ECMAScript 中具有多种功能和应用方式。理解了函数的基本特性及其使用方法,我们可以更高效地编写和优化代码。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月07日 05时43分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Laravel5.5集成七牛云上传、管理(删除、查询)
2025-04-04
Laravel5.5集成极光推送_解决推送失败重推问题
2025-04-04
Laravel5多应用修改
2025-04-04
Laravel5实现的RBAC权限管理操作示例
2025-04-04
Laravel5:sql语句的正确打印方式
2025-04-04
laravel中composer镜像服务的方式
2025-04-04
Laravel从入门到精通:开启高效开发之旅
2025-04-04
laravel使用uuid主键ID
2025-04-04
Laravel前后台+API路由分离架构(完善)
2025-04-04
laravel接入Consul
2025-04-04
laravel框架中使用redis时报错
2025-04-04
Laravel渴求式加载
2025-04-04
Laravel集合探学系列——添加扩展macro策略(一)
2025-04-04
Laravel项目宝塔部署全攻略:从0到1的实战指南
2025-04-04
laravl 文件存储云存储
2025-04-04
LARGE_INTEGER
2025-04-04
LaTeX 在线编辑器(LaTeX online editors)
2025-04-04
latex不能识别eps图片
2025-04-04