0

0

深入学习es6作用域

青灯夜游

青灯夜游

发布时间:2019-11-26 14:47:33

|

2105人浏览过

|

来源于segmentfault

转载

最近重新学习了es6的知识。根据视频和一些资料做出自己理解中的一些笔记,希望能帮到大家。

深入学习es6作用域

作用域?

几乎所有的编程语言的最基础模型之一就是在变量中储存值,并且取出修改这些的值的能力,事实上,在变量中存储值和取出值的能力,给程序赋予了状态。如果没有这样的概念,一个程序虽然可以执行一些任务,但是它们将会受到极大的限制而且不会非常有趣。但是这些变量该存储在哪,又给如何读取?为了完成这个目标,需要制定一些规则,这个规则就是:作用域;

【相关课程推荐:JavaScript视频教程

作用域主要有哪几种?

作用域主要分为全局作用域、函数作用域、动态作用域、块级作用域;
对象 类型
window 全局作用域
fn 函数作用域
{} 块级作用域
this 动态作用域

作用域查找规则?

1、 执行环境有全局作用域和函数作用域之分;2、每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链;3、函数的局部环境不仅可以访问函数作用域内的变量,还可以访问包含起父级环境乃至全局环境;4、全局环境只能访问全局声明的变量和函数,而不能直接访问局部环境重的任何数据。

全局作用域

变量在函数外定义,即为全局变量。
全局变量有全局作用域: 网页中所有脚本和函数均可使用。
如果变量在函数内没有声明(没有使用var关键字),该变量为全局变量。

// 以下实例中 carName 在函数内,但是为全局变量。
// 此处可调用 carName 变量
 
function myFunction() {
    carName = "Volvo";
    // 此处可调用 carName 变量
}
在函数内部或代码块中没有定义的变量上是作为 window/global 的属性存在,没有使用 var 定义的变量可以被 delete 的,而全局变量不可以。

函数作用域

函数内部声明的变量,称为函数作用域。函数内部的变量外部无法
直接访问,可以通过retun 或者闭包的方式去访问。

宠物商店
宠物商店

目前,PetShop已经从最初的2.0、3.0等版本,发展到了最新的4.0版本。PetShop 4.0使用ASP.NET 2.0技术开发,其中加入了众多新增特性,因此,在性能、代码数量、可扩展性等方面有了重大改善。可以说,学习PetShop 4.0是深入掌握ASP.NET 2.0技术的捷径。本节将引领读者逐步了解PetShop 4.0的方方面面,包括应用程序安装、功能和用户界面简介、解决方案和体系

下载
// 此处不能调用 carName 变量
function myFunction() {
    let carName = "Volvo";
    // 函数内可调用 carName 变量
}

function myFunction() {
    let carName = "Volvo";
    rerurn carName;
    // 函数内可调用 carName 变量
}
let fn=myFunction()//Volvo;


function myFunction() {
    let carName = "Volvo";
    function getName(){
        console.log(carName)
    }
    return getName();
    // 函数内可调用 carName 变量
}
myFunction() //Volvo

块级作用域

es6出现后,用let命令新增了块级作用域,外层作用域无法获取到内层作用域,非常安全明了.即使外层和内层都使用相同变量名,也都互不干扰。

关于暂时性死区
* 在使用let命令声明变量之前,该变量都是不可用的。如果去调用这种情况被称为暂时性死区。
let 特性
*  let不存在变量提升
*  let不允许重复声明
*  拥有块级作用域
*  不可以使用window去调用
const 特性
*  定义常量
*  不允许修改常量的值
*  不允许先声明后赋值
*  同上
if(1){
  let a = 1
  console.log(a)
}

动态作用域

动态作用域不关心函数和作用域是如何声明以及在何处声明的,只关心它们从何处调用。和this的机制就很像;
其实这里就有延伸出js的词法作用域(静态作用域),而与词法作用域相对的是动态作用域,函数的作用域是在函数调用的时候才决定的

let name='youzi';
function getName(){
    let name="tuzi";
    function getAge(){
        console.log(name)
    }
    return getAge();
}
getName() //tuzi

词法作用域

JavaScript采用的是词法作用域,函数的作用域在函数定义的时候就决定了。


let name='youzi';

function getName(){
   console.log(name)
}
function getAge(){
    let name='tuzi';
    getName()
}
getAge() //youzi

本文来自 js教程 栏目,欢迎学习!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号