网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

简单理解 JavaScript 的词法作用域

作用域

作用域就是一对{},是一个盒子,代码在盒子中运行,按理来说在里面声明的变量(这种变量叫作局部作用域)不能被外界访问,除非访问父盒子的变量。作用域决定了代码生效的区域以及资源(变量、函数)可见的区域。

专注于为中小企业提供网站设计、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业丹棱免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

function fun() {
  let a = 20;
}();

console.log(a); // Uncaught ReferenceError: a is not defined

fun函数的作用域声明了变量 a,而函数的作用域与console.log(a)所在的作用域不相同,因此,访问变量就报错了。

块级作用域

JS 中存在一个关键字var,它也是用来声明变量的,是 ES5 之前的语法了。但是现在的教材和教程中存在其他两个变量声明的关键字:letconst。var 在函数作用域内声明变量,外界是不能访问的,但是对于 if、for 这类语句的作用域,var 就具有穿透性。

下面我写了一个作用域,我希望变量 x 是不能被外界访问的:

{
  var x = 10;
}

console.log(x) // => 10

for (var i = 0; i < 10; i++) {
  // ...
}

console.log(i); // 10

很明显,for 语句、以及单独的一对{}这种作用域都能被外界访问。ES6 关键字let声明的变量,外部想要使用块级作用域的变量x就会报错:

{
  let x = 10;
}

console.log(x); // Uncaught ReferenceError: x is not defined

for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i); // Uncaught ReferenceError: i is not defined

所以,块级作用域应该完全符合作用域的定义。因为历史原因,JS 还依旧可以使用var关键字声明变量,上面已经说明这个关键字的弊端,如果坚持使用,除了函数作用域以外,作用域就不再具有块级作用域的功能。

全局作用域

全局作用域的范围比其他的作用域的范围更大。