JavaScript函数

server/2024/10/18 3:20:28/

一、 函数的定义

和变量类似,函数必须先定义然后才能使用。

使用 `function` 关键字定义函数。

> function:函数、功能。

【方式 1 函数声明

function fun() {
    // 函数语句块
}

- `function`:定义函数的关键字
- `fun`:函数名(必须符合 JS 标识符命名规则)
- `()`:圆括号中是形参列表,即使没有形参,也必须书写圆括号
- `{}`:花括号内为函数语句块

【方式 2 函数表达式】

var fun = function() {
    // 函数语句块
}
;

- `function(){}`:匿名函数
- `()`:圆括号中是形参列表,即使没有形参,也必须书写圆括号
- `{}`:花括号内为函数语句块
- `fun`:变量(指向一个函数)

风格说明:

​ function fun() {​} // 末尾不需要加 ;

var fun = function() {

}; // 末尾应该加上 ;(因为这是一个赋值语句)

二、函数的调用

执行函数体中的所有语句,就称为 “调用函数”。

调用函数非常简单,只需要在函数名字后书写圆括号对即可。
调用函数 :  fun();    

三、函数声明的提升

和变量声明提升类似,函数声明也可以被提升。

fun();
// 在预解析阶段会被提升
function fun() {
   alert("函数被执行");
}

效果相当于:

function fun() {
   alert("函数被执行");
}
fun();

【函数表达式不能被提升】

fun();  // 报错!
var fun = function() {
   alert("函数不能被执行");
};

解释:函数表达式不能被提升的本质原因是函数表达式定义的其实是个变量,只不过是把函数赋给这个变量,而变量的提升只提升定义,不提升赋值!

还是那个原则:先定义再使用!

四、函数优先提升

可以简单理解为:函数提升程度 > 变量提升程度。

在JavaScript中,“提升”(hoisting)是指变量和函数声明会被移动到其作用域的顶部的行为。然而,需要注意的是,只有声明部分会被提升,而赋值或函数体不会被提升。

函数提升

函数声明会在任何变量声明之前被完全提升,这意味着函数声明不仅会被提升到作用域的顶部,而且整个函数体也会被提升。例如:

console.log(add(1, 2)); // 输出: 3function add(a, b) {return a + b;
}

在这个例子中,即使add函数在调用之后才定义,它仍然可以正常工作,因为整个函数声明被提升了。

变量提升

对于变量,只有声明部分会被提升,而初始化(即赋值)不会被提升。例如:

console.log(num); // 输出: undefinedvar num = 5;

这里,num的声明被提升到了作用域的顶部,但是赋值没有被提升,所以第一次输出num时会得到undefined

函数表达式与变量提升

如果函数是通过表达式来定义的(即函数表达式),那么它遵循变量提升的规则:

console.log(sum(1, 2)); // 抛出错误:sum is not a functionvar sum = function(a, b) {return a + b;
};

在这个例子中,虽然sum的声明被提升,但是函数的赋值没有被提升,因此在函数表达式赋值之前尝试调用sum会导致错误。


http://www.ppmy.cn/server/132661.html

相关文章

为什么inet_ntoa会返回错误的IP地址?

目录 1、调用inet_addr和inet_ntoa实现整型IP与点式字符串之间的转换 1.1、调用inet_addr将点式字符串IP转换成整型IP 1.2、调用inet_ntoa将整型IP转换成点式字符串IP 2、调用inet_ntoa返回错误点式字符串IP的原因分析 3、解决多线程调用inet_ntoa返回错误点式字符串IP的办…

函数地址对齐 __attribute__((aligned(64))) 编译器选项 -falign-functions=4

1, 实验原料 源代码 hello.c #include <stdio.h>#define ALI // __attribute__((aligned(64)))float ALI adddd(float a, float b, float c, float d){ab;ac;ad;return a; }float ALI subbbb(float a, float b, float c, float d) {a- b;a-c;a-d;return a; }int mai…

Java 小游戏《超级马里奥》

文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目&#xff0c;并将本游戏需要用到的图片素材 image…

实操部署amis-admin

当需要做一个web服务的时候&#xff0c;前端的实现很令我头疼。搜了一圈前端低代码框架后&#xff0c;注意到百度贡献的amis&#xff0c;通过json来写前端&#xff0c;很酷啊。不得不说&#xff0c;一个好的demo项目&#xff0c;真的能让人迅速进入状态&#xff0c;比直接看文档…

从HCI和空口分析HFP通话和eSCO建立

背景 HFP作为经典蓝牙通话建立和断开的协商服务&#xff0c;通话数据则是通过eSCO链路进行传输&#xff0c;下面以手机和蓝牙耳机为例&#xff0c;结合HCI和空口分析从HFP连接建立&#xff0c;到AT命令协商会话&#xff0c;再到eSCO通话数据链路的建立 。 1&#xff1a;HFP连…

this指针—静态成员—单例模式

01 this指针 C是在C语言的基础上发展而来的&#xff0c;第一个C的编译器实际上是将C程序翻译为C语言&#xff0c;然后再使用C语言编译器编译 C语言中没有类的概念&#xff0c;只有结构&#xff0c;函数都是全局函数&#xff0c;没有成员函数的概念 翻译的时候&#xff0c;将cla…

24/10/12 算法笔记 LeNet

LeNet-5的成功在于其能够自动从图像中学习特征&#xff0c;而不需要人工设计特征提取器。这种能力使得LeNet-5在图像识别和分类任务中表现出色&#xff0c;并且对后来的深度学习模型产生了深远的影响。尽管现在的深度学习模型在规模和复杂性上远超LeNet-5&#xff0c;但LeNet-5…

好用的python相关的AI工具Bito介绍

插件名称&#xff1a;Bito 好用的python相关的AI工具Bito介绍 step 1:点插件step 2&#xff1a;搜索bito并安装step3 &#xff1a;需要登录&#xff0c;要有真实邮箱&#xff0c;按步骤走就行&#xff0c;完后就可以使用 step 1:点插件 step 2&#xff1a;搜索bito并安装 step3…