15年软件开发经验 只做源码定制 互联网+定制化解决方案

15年软件开发经验,只做源码定制!

原创设计 定制开发

满足您的个性化需求

当前位置:首页 前端开发 js

什么是作用域

梁鹏翱| 发布于 2021-10-30 16:11:51| 542阅读| 0点赞| 0评论
举报

分清作用域和作用域链

1.什么是作用域

作用域决定了代码区块中变量和其他资源的可见性,**作用域就是一个独立的独立的地盘,让变量不外泄.暴露出去,作用域最大的用处就是隔离变量,不同作用域下变量名不会冲突

作用域可以分为

1.全局作用域,

2.私有作用域

3.es6块级作用域

2.全局作用域

当打开页面的时候,会提供一个供js代码执行的环境,全局作用域,会默认提供一个最大的window对象。

【全局变量】:在全局作用域中声明的变量就是全局变量,其中下面的a 和fn 就是全局变量

【全局变量和window关系】 在全局作用域中声明的变量:var、function(除去es6的),相当于给window上添加了属性,属性名就是变量名,属性值就是变量值

调用window 下的方法时,可以省去window不写:

window.alert("1");
alert("1");
 
window.Number("1");
Number("1");
 
 
var a=3; // a是全局变量
function fn(){ // fn 是全局变量
      var num=3;
      function f1(){
      }
}
 
console.log(window.a);
console.log(window.fn);

所有未定义直接赋值的变量自动声明为拥有全局变量

所有window对象的属性拥有全局作用域

所有window对象拥有全局作用域

全局作用域的弊端:如果我们写了很多行代码,变量定义没有用函数包括,那么他们就全部在全局作用域中,这样会污染全局命名空间容易引起命名冲突

3.函数作用域(私有作用域)

【私有变量】:

  • 形参
  • 在私有作用域中声明的变量就是私有变量。

在私有作用域外面,去访问私有变量的话,是访问不到的,但是在私有作用域里面可以访问到外面的变量

        var a = 66;
 
        function fn() {
            var x = 1;
            var y = 3;
            console.log(a);//66
            return x + y;
        }
        console.log(x);// x is not defined
 
        fn();

块语句(大括号{}中间的语句)如Switch和if条件语句或for和while循环语句,不像函数它们不会创建新的作用域,在块语句级作用域中定义的变量将保留在他们已经存在的作用域中

4.es6块级作用域

先来看一下es6中的let

let不存在变量提升

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

阻断了和window的关系

let a=2;
console.log(window.a);// undefined

不能重复声明

es6中没有变量提升,但是有一个自我检测的一个机制,在代码自上而下执行前,会先进行检测,看是否有重复声明的变量,如果有的话,就先报错。

let a=2;
console.log(a);
var a=3; // 不能进行重复的声明:Uncaught SyntaxError: Identifier 'a' has already been declared
console.log(3);

暂时性死区

ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量就会报错。在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。


0

0条评论

别默默看啦~登录/注册一起参与讨论吧~

热门标签

梁鹏翱
微信扫一扫立即咨询
账号登录|扫码登录

立即注册 |忘记密码?

欢迎注册

已有账号马上登录

重置密码

扫码绑定微信
微信扫一扫

绑定手机号

分享到-微信

举报

  • 举报类型:

  • 举报描述:

您好,当前积分不足。

在线客服
拨打电话
17330196230 13230981129
顶部