【前端开发入门】JavaScript快速入门--函数技巧

目录

  • 引言
  • 一、函数基本注意事项
    • 1. 函数定义
    • 2. 默认参数
    • 3. 函数返回值及闭包
      • 3.1 举个函数返回值的简单例子
      • 3.2 当我需要利用函数内部变量做一些运算时,就需要使用js的闭包
  • 二、函数注释
    • 1. 单行注释
    • 2. 多行注释
    • 3. 进阶玩法
  • 三、总结

引言

本系列教程旨在帮助一些零基础的玩家快速上手前端开发。基于我自学的经验会删减部分使用频率不高的内容,并不代表这部分内容不重要,只是对于初学者来说没必要一开始就学的面面俱到。我希望可以先通过主干内容带大家入门前端,细节技巧性内容,可以在后续的开发工作中自行发现并掌握。

在上一篇【前端开发入门】JavaScript快速入门–数据操作 中,我们已经熟悉了js基本数据操作,本篇主要介绍js的函数封装。

函数封装也没啥特别的东西,主要是将实现特定功能的js逻辑运算打成一个包,一个入口传参也可以不需要,一个出口返回处理结果也可以不需要。无需关心内部是如何操作的。我会把日常编写函数需要注意的地方列举一下,仅供参考。


一、函数基本注意事项

1. 函数定义

简单过一下函数定义的基本写法

为了避免一些不必要的麻烦,遵循先定义后使用的原则,我比较倾向于后两种写法。

  • 第一种写法存在函数提升,可以在定义函数前提前调用,使用起来更加便捷,但是对于项目庞大或者多人协作不太友好(函数定义的位置不好找,但是不影响调用,这会使得出现一些意外的bug)。
  • 第二三种写法不存在函数变量提升,强制先定义后调用,颠倒顺序会报错提醒。
// 函数声明
function add(a, b) {return a + b;
}// 函数表达式
const multiply = function(a, b) {return a * b;
};// 箭头函数(ES6)
const subtract = (a, b) => {return a - b;
};

2. 默认参数

当我需要函数没有传入参数时也可以正常运行

写法1:利用 || 符号给参数赋默认值

// 使用默认参数
const greetWithDefault = (name) => {name = name || "default user";console.log("Hello, " + name + "!");
};
// 调用函数
greetWithDefault(); // 输出: Hello, default user!
greetWithDefault("qbbmnn"); // 输出: Hello, qbbmnn!

写法2:利用es6的函数参数默认值写法

// 使用默认参数
const greetWithDefault = (name = 'default user') => {console.log('Hello, ' + name + '!');
}
// 调用函数
greetWithDefault(); // 输出: Hello, default user!
greetWithDefault('qbbmnn'); // 输出: Hello, qbbmnn!

3. 函数返回值及闭包

函数内部可以使用 return 关键字返回一些内容,此时函数被调用后整体表现为return的内容

需要注意的点:return即代表函数执行完毕的地方,return后边的代码(仍在函数体内部)不会再被执行。

3.1 举个函数返回值的简单例子

const test = () => {const innerVal = 1;return innerVal;
};
// 调用函数,test()此时被替换为innerVal的值,整体作为表达式赋值给res
const res = test();
console.log(res); // 输出:1

3.2 当我需要利用函数内部变量做一些运算时,就需要使用js的闭包

简单的理解闭包:函数返回一个内部函数,内部函数调用了函数内部的变量,使得函数内部变量可以参与到函数外部的运算中去。

const test = () => {const innerVal = 1;const inner = (outerVal = 2) => {// inner函数调用了test函数内部变量console.log(outerVal + innerVal); // 访问外部函数的变量};// 将inner函数返回出去return inner;
};
// 此时res被赋值了inner函数
const res = test();
res(5);// 输出:6

此时我们就完成了js的闭包,虽然这个特性可以让我们利用函数内部的变量完成一些外部调用运算,但是我们仍需注意一下内存管理。

内存管理过程

  • 函数调用:调用 test() 函数时,JavaScript 引擎会在栈内存中为 test 函数创建一个新的作用域。
  • 变量声明和初始化:在 test 函数的作用域中,声明并初始化了局部变量 innerVal,其值为 1。
  • 闭包创建:在 test 函数内部定义了一个名为 inner 的函数,这个函数可以访问 test 函数的作用域中的 innerVal。
  • 返回闭包:test 函数返回 inner 函数。
  • 赋值给 res:返回的 inner 函数被赋值给 res 变量。

内存保留

  • 闭包引用:由于 res 变量引用了 inner 函数,而 inner 函数又引用了 innerVal,因此 innerVal 的内存不会被释放。JavaScript 引擎会保持 innerVal 的内存,以确保 inner 函数在任何时候都能访问到它(假如innerVal占用内存很大,但是res一直没有被调用,那么这块内存将被持续占用,也就是内存泄漏)。
  • 当res不再被使用时,我们需要释放res的内存占用,进而释放innerVal的内存占用。
// 断开引用,释放内存
res = null

二、函数注释

注释内容虽然不执行,但是对于我们熟悉代码逻辑有着很大的帮助。

1. 单行注释

常用的注释手法,vscode的快捷键为 Ctrl + ?

  • 我们可以在任意行代码的空白处按下快捷键(或是手动敲出两个 \\ 符号)添加注释描述内容。
  • 遇到暂时不需要但是可能之后有用的代码,我们可以鼠标选中那部分代码,然后按下注释快捷键,直接多行注释。
// 创建计数器函数
const createCounter = () => {let count = 0;return {// 选中多行,直接按下注释快捷键,将代码注释掉// increment: function () {//   count++;//   return count;// },decrement: function () {count--;return count;},};
};

2. 多行注释

/* 开头,*/ 结尾,中间可以填任意内容而不被执行

/*
这是一个多行注释的例子
可以包含多行文本
不会被执行的代码都可以放在这里
*/

3. 进阶玩法

这里需要利用一个vscode插件 : koroFileHeader ,可根据需求进行配置:配置文档

在这里插入图片描述
插件安装完成后,此时我们鼠标放在函数名那一行(或是函数名上方的空白行)按下快捷键 Ctrl + Shift + ? 即可得到一个模板注释

/*** @description: 执行加法运算的函数* @param {*} a * @param {*} b* @return {*}*/
const add = (a, b) => {return a + b;
};
add(1, 2);

当你鼠标悬浮在add函数调用的地方,vscode会根据你注释的内容给出函数说明提示

在这里插入图片描述

我们也可以在注释中加入一些 markdown 语法(只支持部分语法)

在这里插入图片描述
总之注释是为了更好的解释你的代码在干什么,不论是对于多年后自己重新审视代码,或是其他人参考你的代码,都会带来极大的便利。


三、总结

本篇我们主要介绍了函数的基本使用技巧,包含函数的默认参数、函数闭包,利用这些特性可以帮助我们优雅的完成代码逻辑编写。此外我详细的列举了注释的几个玩法,感兴趣的朋友可以研究下 koroFileHeader 的配置文档,它不只是可以添加函数注释,还可以添加文件的头部注释等。

再接再厉~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3000.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

权威认证!蓝卓获评IDC数字工厂领导者

日前,全球领先的IT市场研究和咨询公司IDC公布了《IDC MarketScape: 中国数字工厂整体解决方案厂商评估,2024》。其中,蓝卓成功入选IDC中国数字工厂整体解决方案厂商,位列领导者象限。 数字工厂整体解决方案领导者 《IDC MarketSc…

$tab的所有用法以及vue关闭页面的方法汇总

1、最简单粗暴的就是直接window.close(); 2.可以设置一个窗口的显示隐藏变量,比如点击新增按钮时,新增页面窗口就进行显示,点击关闭就把这个值置为flase 在最外层绑定open 初始值设为false 点击新增和修改按钮时,把状态置为true即…

全同态加密基于多项式环计算的图解

全同态加密方案提供了一种惊人的能力 —— 能够在不知道数据具体内容的情况下对数据进行计算。这使得你可以在保持潜在敏感源数据私密的同时,得出问题的答案。 这篇文章的整体结构包括多项式环相关的数学介绍,基于多项式环的加密和解密是如何工作的&…

10天进阶webpack---(2)webpack模块兼容性处理

回顾CMJ和ESM的区别 CMJ的本质可以使用一个函数概括 // require函数的伪代码 function require(path){if(该模块有缓存吗){return 缓存结果;}function _run(exports, require, module, __filename, __dirname){// 模块代码会放到这里}var module {exports: {}}_run.call(mod…

【STM32】NVIC / EXTI / AFIO 介绍

文章目录 中断系统NVIC简介NVIC基本结构NVIC优先级分组EXTI外部中断EXIT基本结构AFIO复用IO口EXTI内部框图 AFIO / EXTI / NVIC 相关函数AFIO相关函数EXTI相关函数NVIC相关函数 旋转编码器简介对射式红外传感器计次接线图CountSensor(传感器)驱动程序封装…

【Linux内核大揭秘】程序地址空间

文章目录 什么是程序地址空间地址空间的组成虚拟内存技术 如何理解程序地址空间页表页表的细节关于堆区 在Linux中如何查看各个分段的信息总结 什么是程序地址空间 程序地址空间是一个程序在执行期间可以访问的内存范围。它由操作系统为每个进程分配,以确保进程之间…

nginx代理出现的请求头中获取不到acc_token问题

1.问题 程序开发完成之后,发现页面登录之后,获取不到用户信息。发现时没有获取到token信息。本地程序开发完成,后端服务成功署到服务器。通过云服务器开放对应的端口,使用本地的前端服务,直接连接服务器后端服务&…

WordPress之generatepress主题安装

1.打开主题列表 2.如果没有自己需要主题点击安装新主题 点击安装并启用 3.不喜欢的 主题可以点击主题进去删除 4.主题自定义编辑 打开自定义,可以修改布局,颜色,排版等等

MySQL之JDBC入门详解

01-JDBC入门 一、JDBC概念 jdbc : java database connection , java数据库连接 jdbc是sun公司定义的java程序访问数据库的规范。 二、JDBC操作需要6步 三、入门程序 1、使用eclipse打开一个新的工作空间 2、切换到java视图界面 3、创建java工程:01-jdbc-helloworl…

BackTrader-Commission 06

Backtrader 策略实例,该部分内容通过使用backtrader对常用的策略实例的编写,提高和熟悉backtrader的实际场景的使用。 [Backtrader]实例:均线策略 [Backtrader] 实例:MACD策略 [Backtrader] 实例:KDJ 策略 [Backtrader] 实例:RSI 与 EMA 结合 [Backtrade…

WordPress伪静态设置

为什么要设置WordPress伪静态,搜索引擎优化(SEO)中,静态URL通常被认为更易于搜索引擎爬虫抓取和索引,有助于提高网站的搜索引擎排名。 WordPress伪静态设置方法主要依赖于服务器环境,以下是针对不同服务器…

sublime python出现中文乱码怎么办

一、乱码现象 利用sublime自带编译快捷方式ctrlB会出现中文乱码的情况。 print("没有循环数据!") print("完成循环!") 二、寻找原因 1、由于之前我已经安装了插件ConvertToUTF8,排除文本编码错误问题。 2、相同的代码在插件sublimerepl搭建的…

【ARM Linux 系统稳定性分析入门及渐进 1.2 -- Crash 工具依赖内容】

请阅读:【Linux 维测及Crash使用专栏】 文章目录 Prerequisites1. 内核对象文件2. 内存镜像3. 平台处理器类型4. Linux 内核版本 Prerequisites crash 工具需要依赖下面的内容: 1. 内核对象文件 vmlinux 文件:需要一个 vmlinux 内核对象文件&#xff…

电路设计过程就是波形整形过程

这种说法有一定的道理。在电路设计中,常常需要对输入的电信号波形进行处理和调整,以满足后续电路或系统的要求,这在某种程度上可以理解为波形整形的过程。 例如,在数字电路中,输入的信号可能存在噪声、干扰或者不符合…

计算机视觉-显著性检测实验报告

实验四 显著性检测实验 一、实验目的 掌握多种显著性检测算法的基本原理。学会使用计算机程序实现不同的显著性检测方法。通过对比不同的显著性检测算法,理解各算法的优缺点。分析显著性检测在实际图像处理应用中的效果和局限性。 二、实验内容和要求 1&#x…

05-Dubbo的应用及注册和SPI机制

05-Dubbo的应用及注册和SPI机制 Dubbo 的服务注册中应用级注册优化 Dubbo 的注册中心 Dubbo 支持很多种注册中心,支持的主流注册中心包括:ZooKeeper、Nacos、Redis Dubbo 需要引入注册中心依赖,并且配置注册中心地址,这里以 ZooKe…

【 AI 大模型:重塑软件开发的新势力】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

南宁周边乡村游微信小程序ssm+论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1微信开发者工具 微信开发者工具现在已经被小程序开发团队开发运行,目前微信开发者工具任然在不断的完善中,在开发小程序时经常要不断的更新。可以使用微信扫码登陆开发者工具,开发者工具将使用这个微信帐号…

ssm校园二手交易管理系统+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 1 绪论 1 1.1 选题背景 1 1.2 选题意义 1 1.3 研究内容 2 2 系统开发技术 3 2.1 MySQL数…

DB-GPT系列(二):DB-GPT部署(镜像一键部署、源码部署)

一、简介 DB-GPT 是一个开源项目,其将大语言模型 LLM 与数据库紧密结合。该项目主要致力于探索如何让预训练的大规模语言模型(例如 GPT)能够直接与数据库进行交互,从而生成更为准确且信息丰富的回答。 DB-GPT部署后能否直接使用…