5.12 js基础(函数,作用域)

2023-10-21 19:30
文章标签 基础 函数 js 作用域 5.12

本文主要是介绍5.12 js基础(函数,作用域),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Js核心语法 day03

回顾:

  • 原始数据类型
  • 数据类型的转化

目标 :

  • 函数
  • 作用域

一、函数的概念

在 JS 里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用。

函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用

JavaScript 函数会在某代码调用它时被执行。

// 声明函数
function name() {//函数体代码console.log('allen') //该函数会打印出ok
}

二、JavaScript 函数语法

2.1函数的声明的两种方式

1.自定义函数方式

2.函数表达式

首先我们来看一下自定义函数

2.2自定义函数方式(命名函数)
  • JavaScript 函数通过 function 关键词进行定义(必须小写),其后是函数名和括号 ()。
  • 函数名可包含字母、数字、下划线和美元符号(规则与变量名相同)。
  • 圆括号可包括由逗号分隔的参数:
  • 由函数执行的代码被放置在花括号中:{}
function name(参数1,参数2) {//要执行的代码console.log(参数1,参数2)
}
2.2.1函数调用:
// 调用函数
函数名();  // 通过调用函数名来执行函数体代码
  • 调用的时候千万不要忘记添加小括号

  • 口诀:函数不调用,自己不执行

    注意:声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码。

函数调用常见的几种形式:

  1. 当事件发生时(当用户点击按钮时)
  2. 当 JavaScript 代码调用时
2.2.3函数的参数

函数参数的语法:

  • 形参:函数定时设置,接收调用时传入
  • 实参:函数调用时传入效果好内的真实数据

在这里插入图片描述

参数的作用 : 在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去。

函数参数的运用:

// 带参数的函数声明
function 函数名(形参1, 形参2 , 形参3...) { // 可以定义任意多的参数,用逗号分隔// 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3...); 
  1. 调用的时候实参值是传递给形参的
  2. 形参简单理解为:不用声明的变量
  3. 实参和形参的多个参数之间用逗号(,)分隔
2.2.4函数形参和实参数量不匹配时
实参个数说明
实参个数等于形参个数输出正确结果
实参个数多于形参个数只能取到形参的个数
实参个数小于形参个数多的形参为undefined

注意:1.在JavaScript中,形参的默认值是undefined。

​ 2.在函数中,参数是局部变量。

小结:

  • 函数可以带参数也可以不带参数
  • 声明函数的时候,函数名括号里面的是形参,形参的默认值为 undefined
  • 调用函数的时候,函数名括号里面的是实参
  • 多个参数中间用逗号分隔
  • 形参的个数可以和实参个数不匹配,但是结果不可预计,我们尽量要匹配

传参的使用案例:

<button onclick="add_del(false)">-</button>
<input id="val" type="text" value="1">
<button onclick="add_del(true)">+</button>function add_del(bool) {var val = document.getElementById('val').valueif (val <= 0) { //进阶版如果没有了,则返回return alert('没有了')} else {if (bool) {val++} else {val--}document.getElementById('val').value = val}
}
2.2.5函数返回:

函数通常会计算出***返回值***。这个返回值会返回给调用者:

返回值:函数调用整体代表的数据;函数执行完成后可以通过return语句将指定数据返回 。

function add(a, b) {return a * b;                // 函数返回 a 和 b 的乘积
}
var x = add(7, 8);        // 调用函数,返回值被赋值给 x
  • 当 JavaScript 到达 return 语句,函数将停止执行。
  • 如果函数没有 return ,返回的值是 undefined
  • add引用的是函数对象,而 add() 引用的是函数结果。
2.2.6自调用函数
//函数的自调用
//一次性函数
(function () { console.log('我是方法一') })();
(function () { console.log('我是方法二') }());
!function () { console.log('我是用!号') }();
void function () { console.log('我是用void') }()

注意:使用分号隔开

2.3函数表达式方式(匿名函数)

函数的使用方法与变量一致,在所有类型的公式、赋值和计算中。

使用变量来存储函数的值:

var x = add(7,8);
var text = "The temperature is " + x + " Celsius";

您能够把函数当做变量值直接使用:

var text = "The temperature is " + add(7,8) + " Celsius";
  • 因为函数没有名字,所以也被称为匿名函数
  • 函数表达式方式原理跟声明变量方式是一致的
  • 函数调用的代码必须写到函数体后面

三、作用域

概念:1个变量的可用的范围

  • 全局作用域:直接放在全局的作用域中的变量,只希望所有的作用域能够公用的变量就声明在全局作用域中。

    var carName = " 大众"; // 此处可调用 carName 变量function myFunction() {    // 函数内可调用 carName 变量}
    
  • 局部作用域:声明在函数内部的变量或者方法的参数变量

function myFunction() {    var carName = "大众";    // 函数内可调用 carName 变量}// 此处不能调用 carName 变量
  • 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
 function myFunction() {    carName = "大众";    // 此处可调用 carName 变量}myFunction()// 此处可调用 carName 变量

四、变量提升

js中的变量和函数在编译过程中是会优先被提升至当前作用域的顶部。

console.log(a) // undefinedvar a = 2

相当于:

var aconsole.log(a) // undefineda = 2

var a声明向上提升,a=1赋值留在原处

变量提升不能跨script
<script>console.log(a)</script><script>var a = 1;</script>// 控制台报错
不用var直接赋值
console.log(a);  //ReferenceError: a is not defineda = 1;

只有声明本身会被提升,而赋值操作不会被提升。

在 if 中
console.log(a) // undifinedif(false){  var a = 1;}
函数提升

函数会优先于变量 先提升

console.log(foo) var foo = 5function foo() {  console.log('3')}

遇到同名的函数声明,则覆盖之前的函数声明

foo() // 4function foo() {  console.log('3')}function foo() {  console.log('4')}

函数声明会被提升,但函数表达式不会被提升。

foo() // Uncaught TypeError: foo is not a function, 此时的foo为undefinedvar foo = function() {  console.log('1')}

相当于:

var foofoo()foo = function() {  console.log('1')}
总结:
  • 只有声明本身会被提升,而赋值操作不会被提升。

  • 变量会提升到其所在函数的最上面,而不是整个程序的最上面。

  • 函数声明会被提升,但函数表达式不会被提升。

作业:

  1. 简易计算器(收集两个数字后,点击对应的按钮出现对应的和,差,积,基础效果见图)
注意用户体验!!!!

这篇关于5.12 js基础(函数,作用域)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256472

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)