Javascript教程五——函数

JavaScript基础——4.JS函数 JS 函数声明需要以 function 关键字开头,后面跟上空格以及函数名,函数体用花括号括起来 格式如下:function 函数名(参数) {// 函数中的代码// 示例代码 函数声明// 函数表达式 类似于 python中的匿名函数。 阅读详情

5、 函数

5.1 函数的两种表达

1、函数声明

function abs(x) {
 	if (x >= 0) {
    	return x;
	} else {
    	return -x;
	}
}

2、函数表达式

var abs = function (x) {
	 if (x >= 0) {
    	return x;
	 } else {
    	return -x;
	 }
};

上述abs()函数的定义如下:

1、function指出这是一个函数定义
2、abs是函数的名称
3、(x)括号内列出函数的参数,多个参数以,分隔
4、{ ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句
5、上述两种方法完全等价

注意 如果把return语句拆成两行,一部分浏览器会自动在return后加上;造成返回永远是 undefined。

5.2 函数声明提升

在学习变量的时候,我们了解到var会发生变量提升的情况:变量通过var声明,会提升到作用域最上面。

声明提升在函数这里也是生效的

所以第一种的函数声明会提升到作用域最前面,也就是说,函数在哪里都可以使用;但是第二种的函数表达式,因为存在 = ,也就是定义,JS里面只有声明可以提升,所以用函数表达式创建的函数,只能在定义下方使用,否则会显示undefined,因为只有声明,没有定义,这是最大的区别。

5.3 参数

JS的参数有两种,形参与实参,形参是在函数参数那里声明的,实参则是真正传进来的,这里有两种情况:

形参 > 实参

当形参 > 实参时,没有被新赋值的形参,会使用自己定义的value,如果自己没有定义,那么就会时undefined。

形参 < 实参

而当形参 < 实参,那么就会直接把多出来的实参忽略,但是忽略归忽略,实际上的实参是有一个专门的数组来接受的,这就是arguments。

arguments

JS 函数中都会隐式生成一个 arguments[ ] 即实参表,不论传递多少个实参, 都会先将其放到函数的参数表中存放,所以, 在实参比形参的数量多的情况下,可以通过调用 arguments[ ] 来取出剩余的实参。

但是请注意:arguments只是类数组,如果要使用,需要进行转换,才可以利用forEach进行遍历。

var arr = Array.form(arguments);    // 进行转换

还可以通过ES6引入的扩展符... 来将类数组转换成数组:

var arr = [...arguments]; // 结果同上

注意一点,函数是有一个length属性的,这个属性表示的是形参的长度。

rest

ES6还提供了一种接收多余参数的方式,不用知道形参的名字,直接全部接受,也是利用了扩展符:

function find(name,age,...rest){
	// rest会以数组的形式接收剩余所有实参。
}

5.4 局部作用域

在JS里面,局部作用域存在于函数,在函数内部声明的变量在外部会失效,但是注意,JS起初是没有块级作用域,也就是说,最小的局部作用域就是函数了。

function a(){
	var x = '111111';
	console.log(x); // '111111'
	if(true){
		var x = '2222222';
	}
	console.log(x); //  2222222    这就是因为没有块级作用域
}
console.log(x); // undefined    这是因为有函数作用域

函数内部声明函数的情况下,内部函数可以使用外部声明变量,但外部仍然不可以使用内部变量。

function arr(){
	var x = '111111';
	function brr(){
		var y = x; // '111111'
	}
	console.log(x); // '111111'
	console.log(y); // undefined
}

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的。

function foo() {
	for (var i=0; i<100; i++) {
    	//
 	}
 	i += 100; // 仍然可以引用变量i
}

为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量。

function foo() {
	var sum = 0;
	for (let i=0; i<100; i++) {
    	sum += i;
	}
	// SyntaxError:
	i += 1;
}

5.5 全局作用域

不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性。

这说明JavaScript实际上只有一个全局作用域。任何变量(函数也视为变量),如果没有在当前函数作用域中找到,就会继续往上查找,最后如果在全局作用域中也没有找到,则报ReferenceError错误。

全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突。

5.6 常量

ES6标准引入了新的关键字 const 来定义常量,const 与 let 都具有块级作用域。

const x = 111;

5.7 解构赋值(数组和对象)

从ES6开始,JavaScript引入了解构赋值,可以同时对一组变量进行赋值。

var [x, y, z] = ['hello', 'JavaScript', 'ES6'];
console.log('x = ' + x + ', y = ' + y + ', z = ' + z);

如果需要从一个对象中取出若干属性,也可以使用解构赋值,便于快速获取对象的指定属性。

var person = {
	name: '小明',
	age: 20,
	gender: 'male',
	passport: 'G-12345678',
	school: 'No.4 middle school'
};
const {name, age, passport} = person;

本文来源廖雪峰老师教程的笔记,有疑惑可以直接访问廖雪峰老师教程:https://www.liaoxuefeng.com/wiki/1022910821149312/1023022043494624

JavaScript强化教程——Native.js示例汇总 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 —— Native.js示例汇总   Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成。 这篇帖子的目的就是汇总各种写好的NJS代码,方便web开发者。 众人拾柴火焰高,有能力的开发者多多提交NJS代码,大家都会给你点赞的, Android平台 在桌面创建和 阅读详情

相关推荐

五、javascript函数

javascript函数

weixin_42710036的博客 644

Array.from(arr)与[...arr]到底有什么不同

写在开头:在正文开始之前我们先说明一下类数组(估计大家一定不会陌生) 类数组的特点 1.有索引 2.有长度 3.是个对象 4.能被迭代(非必须) 特点说明:对于类数组的特点前三个我就不做说明了哈,主要就是最后一个,能被迭代需要具备什么呢?由图我们可以看出有一个[Symbol.iterator]属性指向该对象的默认迭代器方法。那么它又是如何实现的呢? 迭代器(iterator)...

weixin_34326558的博客 1700

本届挑战赛亚军方案:基于大模型和多AGENT协同的运维

我们分别构建了异常检测基础模型,一旦系统接受到异常即会通知LLM主管Agent,主管Agent对异常问题进行决策与子领域Agent进行桥接,多个子领域Agent协同工作,实现运维故障自动诊断和多个任务模型的编排,提升运维效率。

weixin_52705010的博客 2295

【原生JS】JavaScript 教程教案

摘要: 老曹的 JavaScript 教程教案 提供从基础到进阶的 20 节系统性课程,涵盖语法、DOM 操作、异步编程、ES6+ 新特性等核心内容。课程分为 基础篇(变量、函数、数组、DOM)和 高级篇(闭包、原型链、Promise、模块化),结合实战项目(如待办清单、天气应用)巩固技能。推荐配套书籍《Eloquent JavaScript》和 MDN 文档,并介绍现代工具链(VSCode、Webpack)。适合零基础入门或开发者进阶,最终目标为掌握全栈 JavaScript 开发能力

silverclayz的技术分享 2455

Zemax热分析实战:5分钟搞定双胶合透镜温度漂移优化(附操作数详解)

本文详细解析了使用Zemax进行光学系统热分析的全流程,以双胶合透镜为例,重点阐述了如何通过多重结构编辑器模拟温度变化,并利用关键操作数优化系统以抵抗温度漂移。文章提供了从基础设置到高级优化的实战技巧,帮助工程师快速掌握无热化设计方法,确保系统在宽温范围内保持稳定成像性能。

n4o5p6q7r的博客 399

Py6S安装失败?手把手教你解决‘6S executable not found‘错误

本文详细解析了Py6S安装过程中常见的'6S executable not found'错误,提供了从MinGW-w64安装到Fortran编译器配置的完整解决方案。通过优化编译环境和进阶技巧,帮助用户高效完成大气辐射传输建模,提升科学计算效率。

x1y2z的博客 644

黑马JS教程笔记(JavaScript教程)——JS基础

<head><title>JavaScript练习</title></head><body><script></script></body>

Dontla的博客 2661

AM243x多核MCU启动流程解析与OSPI Flash烧录实战

嵌入式系统开发中,引导加载器是芯片上电后执行的第一段软件,负责初始化硬件、加载操作系统或应用程序。其工作原理通常遵循多级引导链,从ROM固件到用户可定制的二级引导程序,逐级建立完整的软件运行环境。这一机制的技术价值在于实现可靠的系统启动、支持安全校验,并为多核异构架构提供协同基础。在应用场景上,引导加载器广泛应用于工业控制、汽车电子和物联网设备,确保设备能从非易失性存储器中自主启动。本文聚焦于TI AM243x这类高性能多核MCU,深入剖析其包含RBL和SBL在内的三级启动流程,并详细演示如何通过UART接

weixin_28703451的博客 584

Javascript函数作为参数——JS学习笔记

JS函数作为参数JS函数作为参数无参有参匿名类型来个狠的:自调用 JS函数作为参数 今天我们来康一康函数作为参数~ 无参 这是无参数函数作为参数 function test1(Func) { Func(); } function test2() { alert("我是test2"); } test1(test2); //无参数只写函数名 成功执行test2: 有参 现在调用的函数有一个参数了: function test1(Func) { Func(mydata); } functi

qq_41135011的博客 9362

Vmware虚拟机一打开就蓝屏解决方法

Vmware虚拟机一打开就蓝屏解决方法 问题: 一打开Vmware虚拟机就蓝屏,如下图所示: 解决方法1: 启用和关闭windows功能(对话框)——>虚拟机平台(选项打对勾,默认没勾选)——>确定后重启——>再进应该就好了。 解决方法2: ①.查看电脑中的Hyper-V服务是否关闭 1.打开控制面板-程序-程序和功能 2.双击启用或关闭Windows功能 3.把Hyper-V前面的勾去掉 如果后期发下没有反应,或者电脑本身Hyper-V的服务没有打开,可以先打开在关闭,试

m0_55901666的博客 26万+

一个开源的AI数据分析工具,与数据对话,一键生成SQL、图表、表格、报告和智能商业分析。

Wren AI是一个开源的AI智能代理,让用户能够跟数据对话,实现从文本到SQL的转换,还能生成图表、电子表格、报告以及商业智能分析。它支持多种语言,能深入挖掘数据价值,提供智能数据探索功能,通过语义索引和精心设计的界面,让用户无需写代码即可获取洞察。Wren AI采用独特的架构,包含Wren UI、Wren AI Service和Wren Engine三大核心服务,可部署在本地或云端,助力团队高效、安全地解锁数据潜力。

AI_Charlotte的博客 4499

JavaScript函数重载(js函数重载)

JavaScript函数重载(js函数重载) 一个猜测 猜测 Java中的方法(函数)重载:类里面的两个或多个重名的方法,方法的参数个数、类型至少有一个不一样,构成了方法重载。 由于js参数类型都为var,我们由此提出大胆猜测:js函数重载只能通过形参的个数不同来区分。 验证 来操作一波: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js函数重载&l

emmm520的博客 3073

高通平台N4单路输入的720P相机预览

N4的一路720P Camera作为MIPI摄像头使用

llw21680的专栏 165

html调用js文件函数_让 JavaScript 跑起来+函数

回想一下,你学过的编程语言是如何跑起来的。是不是经过编译器吭哧吭哧地编译成可执行文件然后再执行?但是 JavaScript 比较特殊。JavaScript 既可以在浏览器中执行,也可以在服务端执行,还可以在移动App中执行,这一切其实归功于 JavaScript 引擎,比如 V8、JavaScriptCore。V8 引擎被应用于谷歌浏览器 Chrome 和 Node.js 。我们看一段官...

weixin_39723655的博客 3202

【异常】Hermes Agent调用z.ai接口失败(余额不足)API call failed (attempt 1/3): RateLimitError [HTTP 429]

补充说明:同步尝试解析接口对应网页时,出现“网页解析失败,可能是不支持的网页类型,请检查网页或稍后重试”提示,该提示不影响核心报错排查,仅作为辅助信息。

奶爸的编程之路,也就一周冷个三天 1198

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【JavaScript 简明入门教程】为了Screeps服务的纯JS入门教程

本教程我们从`Screeps: World`必须的`JavaScript`,将`JS`和`CSS`与`HTML`的教程分离,专注于讲解`JS`的原生基础语法。

m0_73800387的博客 2239

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【JavaScript基础】JS函数

函数定义、调用、参数、返回值、作用域

DUMG 1036

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【JS】JavaScript函数

JavaScript的函数字面量以及调用模式函数字面量调用方法调用模式函数调用模式构造器调用模式Apply调用模式 函数字面量 函数对象通过函数字面量来创建 //创建一个名为 add 的变量, 并把两个数字相加的函数赋给它 var add = function(a,b){ return a+b; } 函数字面量包括4个部分。第一个部分是保留字 function。 第二个部分是函数名,它可以被省...

qq_35724512的博客 1013

javascript js 函数作为函数参数

Js代码   /*   * 求给定参数数组元素中的最大值   *   * 参数num_arr  array类型   * return max 数值型   */   function max_num(num_arr)   {       //保存结果,初始化为数组的第一个元素       var  max=num_arr[0];       var i=0; //循

叶易风云 2261

重新巩固JS(四)——JavaScript函数

文章目录1. 函数概述2. 函数定义3. 函数调用4. 函数参数4.1 默认值4.2 剩余参数5. 函数内部属性5.1 arguments对象5.2 this对象6. 函数是特殊对象6.1 函数的属性:length 和 name6.1.1 length属性6.1.2 name属性6.2 函数的方法: call、apply、bind6.2.1 call方法6.2.2 apply方法6.2.3 bin...

码飞_CC的博客 2197

JavaScript函数式编程利器:matches.js模式匹配实战教程

🚀 探索JavaScript函数式编程的新境界!今天我们来深入了解一个强大的工具——matches.js,它为你带来**模式匹配**的强大功能。在函数式编程中,模式匹配是处理复杂数据结构和控制流的终极武器,而matches.js让这一切在JavaScript中变得简单而优雅。 ## 什么是matches.js模式匹配? matches.js是一个为JavaScript设计的**强大的模式匹配

gitblog_00999的博客 557

JS Raccoon:掌握JavaScript原型链与继承的完整教程

JS Raccoon是一个专注于Web开发技巧的开源项目,提供了丰富的JavaScript编程指南。本教程将帮助你彻底理解JavaScript中独特的原型链与继承机制,这是掌握面向对象编程的核心基础。 ## 为什么原型链是JavaScript开发者的必备知识? JavaScript作为一门灵活的脚本语言,其对象模型与传统的类式继承语言有本质区别。理解原型链不仅能帮助你写出更优雅的代码,还能让你

gitblog_00071的博客 617

副队长JavaScript教程(37)-揭开JS函数的面纱

本文详解JavaScript函数的定义与调用机制,以“开车”为例,介绍函数由function关键字、函数名、参数括号和函数体组成。通过封装重复操作,实现代码复用,提升开发效率。强调函数定义不执行,需调用才运行,为后续学习参数打下基础。

编程副队长 1536

JavaScript(五)——函数

函数在JavaScript中占据很大的地位(其实哪门语言中函数和方法都是很重要的)。但是在原生的JavaScript中,所有的操作都是由函数来完成的,包括我们经常使用的触发器和绑定事件都是由函数来编写,甚至到后面的Vue里面都有很多函数的存在,所以一定要把函数学好。

老程的小白博客空间 554

javascript函数怎么写,js函数的使用规则

undefined 这个类型,就只有 undefined 这一个取值如果一个变量没有被初始化过,结果就是 undefined,是 undefined 类型let num;未定义的情况(非法的情况)JS 未来完全可能设定成,变量不初始化,就直接编译报错只不过当前 JS 要求的没那么严格,于是就搞了一个特殊的 undefined 这样的值,来表示这个非法情况在实际开发中,不应该主动使用 undefined,更不应该依赖 undefined// null。

阿发狗伪原创 725

python3执行javaScript脚本,js2py教程

python3执行javaScript脚本,js2py教程 简介:js2py安装库现在写爬虫很多的网站都开始用js 加密技术了,所以这个库必须要学的,不然你就没法玩了使用教程js2py 执行单个语句js2py 执行函数总结:现在写爬虫很多的网站都开始用js 加密技术了,所以这个库必须要学 ... js2py安装库 现在写爬虫很多的网站都...

qq_35810838的博客 1918
上一篇: Javascript教程四——对象与遍历
下一篇: Vue教程1-创建项目
ruby___ruby
博客等级 码龄9年 2粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值