JS中,函数原来有这么多种定义方法

简介: 最近在期末与暑假假期画饼之间不断奔波,很长时间没有记录了,今天在学习的时候看到了ES6的箭头函数,瞬间找到了写文的动力,那就来梳理一下在JavaScript中一共有几种定义函数的方式吧,最后再(微微)重点的介绍一下箭头函数✨过段时间,要加强算法学习了,这段时间也在力扣和牛客上找题做了一下,发现自己的算法真的烂,所以可能以后还会把算法题解写一写。(🍗+ 1)

前言

最近在期末与暑假假期画饼之间不断奔波,很长时间没有记录了,今天在学习的时候看到了ES6的箭头函数,瞬间找到了写文的动力,那就来梳理一下在JavaScript中一共有几种定义函数的方式吧,最后再(微微)重点的介绍一下箭头函数✨

过段时间,要加强算法学习了,这段时间也在力扣和牛客上找题做了一下,发现自己的算法真的烂,所以可能以后还会把算法题解写一写。(🍗+ 1)

JavaScript定义函数的几种方式

以下是定义函数的几种方式,真正书写的话,个人觉得没有什么必须要用某种格式的情况,根据团队风格或者个人习惯来就好。

最初的我们

我们刚接触js的时候,见到的就是它啦😎

function hello () {
    console.log('hello javascript');
}
hello();

这种方式大概也是陪伴我们时间最长的了吧?是不是呢?

函数表达式

函数都是Function的实例对象,也就可以说函数是值,与字符串,数字等是一样的。这种方法就是通过表达式来定义函数,也就是定义匿名函数,再将匿名函数交给变量。

var hello = function () {
    console.log('hello javascript');
}
hello();

对象方法

这种方法大家应该也都见过,它是定义匿名函数来作为对象属性的值,与函数表达式的理念相同。这种形式最早是在ES3中引入的。

let obj = {
    fun: function() {},
}

ES5中,引入了访问器属性定义:

let obj = {
    get name() {},
    set name(name) {}
}

看到get/set是不是感觉跟Java的类有一点像了,没错我也有这种感觉,继续往下看,类它来了!

在ES6中,有了类的概念(学过java的小伙伴们一定不会陌生),没错,js中也有类,而且也有构造方法等一些与Java类一样的东西。

class Demo{
    constructor(){
        this.fun=()=>{
            console.log('实例方法')
        }
        console.log('构造方法');
    }
    static jingtai(){
        console.log('静态方法');
    }
    yuanxingfangfa(){
        console.log('原型方法')
    }
}
  • 实例方法:定义在构造方法constructor中的this对象上,在类中,构造方法中的this指的是它的实例对象
  • 原型方法:与constructor方法同级,可以通过构造函数的原型链去调用,也可以通过实例对象来调用
  • 静态方法:通过static关键字定义,不能被实例调用,可以被构造函数调用。

箭头函数

终于到了我们这次文章的主角登场啦~ 我去网上查了一些资料,浏览了CSDN和掘金的一些博客社区,很多人都觉得,它是ES2015最具有争议性的函数之一,但是它如今也已经变得众所周知,无处不在。它为函数声明提供了两种不同的格式,赋值表达式(箭头后无大括号"{}")和函数体(代码种包括0到多个语句时)。这个语法还允许在描述单个参数的时候不加圆括号,0个或者1个以上的时候要加圆括号。这些语法结构允许箭头函数有着多种书写格式。

// 无参的赋值表达式
(() => 2*2);

// 一个参数,忽略括号的赋值表达式
(x => x*2);
// 一个参数,忽略括号直接跟函数体
(x => { return x *2 });

// 括号中为参数列表和赋值表达式
((x,y) => x*y);

来稍微解释一下箭头函数

x => x * 2;

等价于:

function (x) {
    return x * 2;
}

箭头函数相当于匿名函数,并且简化了函数定义,使用起来非常的方便。

但是使用箭头函数,我们要注意以下几点:

  • 箭头函数是没有this的,它的this是从外部获取的。
  • 箭头函数不能做new操作,没有this意味着它不能用作构造,所以不能用new调用它们

    var jiantou = () => {};
    var fn = new jiantou();

    这时候会报错,jiantou is not a constructor

  • 箭头函数没有arguments对象,但是同this一样,他可以访问外围函数的arguments对象
  • 箭头函数没有原型和super,它没有原型,也就不能通过super来访问原型的属性,不过同之前的this、arguments一样,这些值由外围最近一层的非箭头函数决定

    var jiantou = () => {};
    console.log(jiantou.prototype); //undefined

最后

还是那句话,你可以暂时不使用这种方法来写代码,但是你不能不会用,因为你不会知道什么时候会突然要求你用这种方法去进行业务操作。

相关文章
|
13天前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
12天前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
12天前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
14天前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
26 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
12天前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
29 7
|
12天前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
13天前
|
JavaScript 前端开发 图形学
JavaScript 中 Math 对象常用方法
【10月更文挑战第29天】JavaScript中的Math对象提供了丰富多样的数学方法,涵盖了基本数学运算、幂运算、开方、随机数生成、极值获取以及三角函数等多个方面,为各种数学相关的计算和处理提供了强大的支持,是JavaScript编程中不可或缺的一部分。
|
18天前
|
JavaScript 前端开发 Go
异步加载 JS 的方法
【10月更文挑战第24天】异步加载 JavaScript 是提高网页性能和用户体验的重要手段。通过使用不同的方法和技术,可以实现灵活、高效的异步加载 JavaScript。在实际应用中,需要根据具体情况选择合适的方法,并注意处理可能出现的问题,以确保网页能够正常加载和执行。
|
13天前
|
JavaScript 前端开发 开发者
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
26 4
JavaScript基础知识-函数的参数