96SEO 2026-02-19 20:50 0
也有属性和方法跟其他引用类型一样。

因为函数是对象所以函数名就是指向函数对象的指针而且不一定与函数本身紧密绑定。
函数通常以函数声明的方式定义比如
另一种定义函数的语法是函数表达式。
函数表达式与函数声明几乎是等价的
还有一种定义函数的方式与函数表达式很像叫作“箭头函数”arrow
构造函数。
这个构造函数接收任意多个字符串参数最后一个参数始终会被当成函数体而之前的参数都是新函数的参数。
来看下面的例子
不推荐我们不推荐使用这种语法来定义函数因为这段代码会被解释两次第一次是将它当作常规
代码第二次是解释传给构造函数的字符串。
这显然会影响性能。
不过把函数想象为对象把函数名想象为指针是很重要的。
而上面这种语法很好地诠释了这些概念。
这几种实例化函数对象的方式之间存在微妙但重要的差别本章后面会讨论。
无论如何通过其中任何一种方式都可以创建函数。
语法定义函数表达式的能力。
很大程度上箭头函数实例化的函数对象与正式的函数表达式创建的函数对象行为是相同的。
任何可以使用函数表达式的地方都可以使用箭头函数
console.log(functionExpressionSum(5,
console.log(ints.map(function(i)
如果只有一个参数那也可以不用括号。
只有没有参数或者多个参数的情况下才需要使用括号
};箭头函数也可以不用大括号但这样会改变函数的行为。
使用大括号就说明包含“函数体”可以在一个函数中包含多条语句跟常规的函数一样。
如果不使用大括号那么箭头后面就只能有一行代码比如一个赋值操作或者一个表达式。
而且省略大括号会隐式返回这行代码的值
b;箭头函数虽然语法简洁但也有很多场合不适用。
箭头函数不能使用
因为函数名就是指向函数的指针所以它们跟其他包含对象指针的变量具有相同的行为。
这意味着一个函数可以有多个名称如下所示
。
注意使用不带括号的函数名会访问函数指针而不会执行函数。
此时anotherSum
属性其中包含关于函数的信息。
多数情况下这个属性中保存的就是一个函数标识符或者说是一个字符串化的变量名。
即使函数没有名称也会如实显示成空字符串。
如果它是使用
console.log(foo.bind(null).name);
用于将函数内的this指向目标对象bind的第一个参数,这里将目标对象置null了
Object.getOwnPropertyDescriptor(dog,
console.log(propertyDescriptor.get.name);
console.log(propertyDescriptor.set.name);
函数既不关心传入的参数个数也不关心这些参数的数据类型。
定义函数时要接收两个参数并不意味着调用时就传两个参数。
你可以传一个、三个甚至一个也不传解释器都不会报错。
函数的参数在内部表现为一个数组。
函数被调用时总会接收一个数组但函数并不关心这个数组中包含什么。
如果数组中什么也没有那没问题如果数组的元素超出了要求那也没问题。
事实上在使用
函数的参数只是为了方便才写出来的并不是必须写出来的。
与其他语言不同在
中的命名参数不会创建让之后的调用必须匹配的函数签名。
这是因为根本不存在验证命名参数的机制。
属性检查传入的参数个数。
下面的例子展示了在每调用一个函数时都会打印出传入的参数个数
{console.log(arguments.length);
1按顺序。
既然如此那么开发者可以想传多少参数就传多少参数。
比如
对象的另一个有意思的地方就是它的值始终会与对应的命名参数同步。
来看下面的例子
,第2个参数没有赋值即使arguments[1]赋值了num2也没有获取到值因为此时num2并不存在这个
10。
但这并不意味着它们都访问同一个内存地址它们在内存中还是分开的只不过会保持同步而已。
另外还要记住一点如果只传了一个参数然后把
设置为某个值那么这个值并不会反映到第二个命名参数(上例中第6行就是这种情况)。
这是因为
对象的长度是根据传入的参数个数而非定义函数时给出的命名参数个数确定的。
中的所有参数都按值传递的。
不可能按引用传递参数。
如果把对象作为参数传递那么传递的值就是这个对象的引用。
中一个函数可以有两个定义只要签名接收参数的类型和数量不同就行。
如前所述ECMAScript
函数没有签名因为参数是由包含零个或多个值的数组表示的。
没有函数签名自然也就没有重载。
前面也提到过可以通过检查参数的类型和数量然后分别执行不同的逻辑来模拟函数重载。
没有函数重载。
在前面的例子中定义两个同名的函数显然会导致后定义的重写先定义的。
而那个例子几乎跟下面这个是一样的
300看这段代码应该更容易理解发生了什么。
在创建第二个函数时变量
之后就不用这么麻烦了因为它支持显式定义默认参数了。
下面就是与前面代码等价的
console.log(makeKing(undefined,
III函数的默认参数只有在函数被调用时才会求值不会在函数定义时求值。
而且计算默认值的函数只有在调用函数但未传相应参数时才会被调用。
箭头函数同样也可以这样使用默认参数只不过在只有一个参数时就必须使用括号而不能省略了
因为在求值默认参数时可以定义对象也可以动态调用函数所以函数参数肯定是在某个作用域中求值的。
VIII这里的默认参数会按照定义它们的顺序依次被初始化。
可以依照如下示例想象一下这个过程
因为参数是按顺序初始化的所以后定义默认值的参数可以引用先定义的参数。
看下面这个例子
Henry参数初始化顺序遵循“暂时性死区”规则即前面定义的参数不能引用后面定义的。
像这样就会抛出错误
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback