前端基础(十二)_函数高级、全局变量和局部变量、 预解析(变量提升)、函数返回值

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 本文介绍了JavaScript中作用域的概念,包括全局变量和局部变量的区别,预解析机制(变量提升),以及函数返回值的使用和类型。通过具体示例讲解了变量的作用域、函数的返回值、以及如何通过return关键字从函数中返回数据。

作用域

作用域指:变量或函数的有效使用范围,有全局作用域与局部作用域两种。

全局变量和局部变量

全局变量:直接在 script 标签下声明的变量,任何地方都能访问,任何地方都能对其值进行改变。
局部变量:函数内部定义的变量,函数内能访问,出了函数的括号就不能访问(垃圾回收)。

例1:全局变量或函数能在任何地方访问和修改

var a = 10; // 全局 在任何地方被访问且修改
function fun1() {
   
    a++;
console.log(a); //11
}
function fun2() {
   
    a++; //12
    a--; //11
    console.log(a); //11
}
fun1();
fun2();
console.log(a);//11

在这里插入图片描述
例2:局部变量或函数只能在函数内部访问

sum();
function sum() {
   
    var a = 10; // 定义一个局部变量
    console.log(a);
    function s() {
   
        console.log(“A”+a);
    }
s();
}
console.log(a); //a 是局部变量,出了函数,就会被销毁(垃圾回收)
s();//s is not defined

注意:不是{}中声明的就是局部变量,只有在函数中声明的是局部变量。

预解析(变量提升)

浏览器在解析js代码的时候,会进行一个预解析的操作,会有一个js解析器(假设有的名字),里面会执行其中的两步(不单单就这两步):
1、找一些东西(var function 参数)
2、逐步执行代码
找var的时候,如果存在var关键字,则会将这个变量先存储下来,存储的形式为:var a,预解析的时候变量中存的都是 undefined,等到逐行解析遇到表达式即 + - * / % ++ – = 等操作才会改变变量的值。
找 function 的时候,会将整个函数都保存下来。
找参数的时候,即执行函数时,函数内部可以看作是一个小的区域,有自己的预解析,参数就跟变量 var 一样。
例1:var

console.log(a); //undefined    
var a = 10; //a = 10
console.log(a);//10

上面代码中,先找 var,存储 a 的值为 undefined,所以第一次打印的结果为undefined,然后执行 a=10。
例2:function

console.log(fun1);
function fun1() {
   
    alert(“fun1”);
    // 我是一个注释
}
console.log(fun1);

上面代码中,函数会整个存储下来,包括注释。
例3:函数内部会进行一个跟外部一样的预解析

var a = 10;
console.log(a); //10
function fun2() {
   
    alert(a); //undefined
    var a = 20;
    alert(a); //20
}
fun2();

函数返回值

函数是用来实现某个特定功能,如计算某个范围内的累加,操作完成之后,在函数外部可能需要使用计算好的这个值,但是在函数内部定义的变量外面访问不了,针对这个情况,函数通过返回值将计算好的数据传出函数,在外部使用。在函数中将某个值返回到函数外,使用 return 关键字。

注意:
1、函数通过关键字return 返回函数中的内容
2、return 一次只能返回一个值
3、函数中只要遇到return,函数就会结束
4、函数没有返回值,默认结果为undefined

例1:计算 1-100 之间的累加和,将结果返回

function fun3(num) {
   
    var sum = 0;
    for (var i = 1; i <= num;i++){
   
        sum += i;
    }
    return sum; //return 关键字,将 sum 的值传出去
}
// 如果函数存在返回值,可以在调用函数的同时得到函数的返回值
console.log(fun3(100));//5050
var sum = fun3(100);
console.log(sum); //5050

在这里插入图片描述

函数返回值类型

和函数的参数一样,函数的返回值也可以是 js 数据类型中的任何一个。
例1:function 做为返回值

function fun1() {
   
    return function () {
   
        alert(“返回了一个函数”);
    }
}
var f = fun1(); // 接收返回的函数
f(); // 调用返回的函数
fun1()(); // 直接调用

以前写的文章 :
1、浏览器预解析之变量提升奥秘
2、this指向-作用域、作用域链-预解析 变量提升-Vue组件传值 父子 子父 非父子-Vue数据双向绑定原理

目录
相关文章
|
4天前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
|
2天前
|
前端开发 JavaScript 开发者
深入解析前端开发中的模块化与组件化实践
【10月更文挑战第5天】深入解析前端开发中的模块化与组件化实践
7 1
|
3天前
|
存储
atoi函数解析以及自定义类型经典练习题
atoi函数解析以及自定义类型经典练习题
10 0
|
7天前
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
15 3
|
7天前
|
机器学习/深度学习 算法 C语言
【Python】Math--数学函数(详细附解析~)
【Python】Math--数学函数(详细附解析~)
|
9天前
|
机器学习/深度学习 前端开发 JavaScript
前端技术探索:从基础到未来趋势的全方位解析
前端技术探索:从基础到未来趋势的全方位解析
20 1
|
21天前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
1月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
2月前
|
存储 前端开发 JavaScript
前端语言串讲 | 青训营笔记
前端语言串讲 | 青训营笔记
36 0
|
4月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
80 2

推荐镜像

更多