信息发布→ 登录 注册 退出

什么是JavaScript函数_如何声明和调用它们

发布时间:2026-01-12

点击量:
JavaScript函数是Function类型的对象,可赋值传参返回;函数声明会被提升,表达式和箭头函数不提升;箭头函数无this和arguments;参数不足时默认为undefined,可用ES6默认参数或解构处理。

JavaScript 函数不是“某种特殊对象”,它就是 Function 类型的对象——这意味着你可以赋值、传参、返回,甚至动态构造。

函数声明 vs 函数表达式:行为差异比写法更重要

最常被忽略的是提升(hoisting)行为不同:

  • function foo() {} 会被完全提升,可在定义前调用
  • const foo = function() {}const foo = () => {} 不提升,访问会报 ReferenceError
  • function 声明在块级作用域(如 if 内)中,不同浏览器行为不一致,应避免

现代代码更倾向函数表达式或箭头函数,尤其在模块导出、回调、事件处理器中。

箭头函数没有自己的 thisarguments

这是最易踩坑的点。当你需要绑定上下文时:

立即学习“Java免费学习笔记(深入)”;

  • 方法内写 setTimeout(() => console.log(this.value), 100) —— ✅ 正确继承外层 this
  • 但写 setTimeout(function() { console.log(this.value) }, 100) —— ❌ this 指向全局或 undefined(严格模式)
  • 若需 arguments,必须用传统函数:function() { console.log(arguments[0]) };箭头函数里访问 arguments 会报 ReferenceError

调用时传参少于形参?不会报错,只是值为 undefined

JavaScript 不校验参数个数。例如:

function greet(name, age) {
  console.log(`Hi ${name}, you are ${age}`);
}
greet('Alice'); // 输出 "Hi Alice, you are undefined"

常见应对方式:

  • ES6 默认参数:function greet(name, age = 0)
  • 检查 arguments.length(仅适用于传统函数)
  • 用解构 + 默认值:function({ name = 'Anonymous', age = null } = {}) {...}

真正难的不是语法,是判断该用哪种函数形式——取决于你是否需要 this 绑定、是否要作为构造器、是否在循环中创建闭包,以及是否导出给其他模块复用。

标签:# javascript  # es6  # java  # 处理器  # 浏览器  # 作用域  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!