码迷,mamicode.com
首页 > 其他好文 > 详细

作用域

时间:2019-01-19 21:47:21      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:概念   star   变量提升   值类型   同名   关闭浏览器   inpu   数据类型   全局   

概念:

  • 提供代码的执行环境;
  • 对于代码执行要有作用域的概念;
  • 开辟一个栈内存;只有关闭浏览器这个栈内存才会销毁;

1、全局作用域:

  • 一打开浏览器,浏览器就会形成一个全局作用域;
  • 在控制台写代码就相当于在全局作用域里写代码 ;
  • 在全局作用域声明的变量我们称之为全局变量;

2、私有作用域

(1)私有变量

在私有作用域中只有两种情况是私有变量

  • 被声明过的变量(带var/function)
  • 形参也是私有变量

(2)函数执行

  • 声明函数的时候,开辟一个堆内存;把函数中的代码当作字符串存到堆内存里
  • 函数执行:把函数体中的字符串当代码执行;
  • 在变量提升之前还会有一个形参赋值的动作;
  • 变量提升之后再去执行代码;

3、两个作用域之间的关系

  • 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量;
  • 如果两个不同的函数体各自声明了同一个变量,那么该变量只在各自的函数体内起作用。换句话说,不同函数内部的同名变量互相独立,互不影响;由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,反过来则不行:

4、块级作用域

  • 一般用大括号{}包含的部分会形成一个块级作用域;用let/const基于ES6语法规范渲染的;(对象的大括号不是块级作用域) 不会对上级作用域产生影响;
  • 循环体也是块级作用域,初始值设置的变量是当前本次块级作用域中的变量

5、作用域销毁

  • 立即销毁:函数执行完成之后返回的内容(引用数据类型)没被占用;值类型直接销毁;
  • 不立即销毁:返回的内容(引用数据类型)暂时被占用
  • 不销毁:返回的内容(引用数据类型)被占用
  function f1() {
    return function() {
      console.log(1);
    };
  }
  f1(); //f1作用域 立即销毁
  f1()(); //f1作用域 不立即销毁
  var f2 = f1(); //f1作用域 不销毁

 

作用域

标签:概念   star   变量提升   值类型   同名   关闭浏览器   inpu   数据类型   全局   

原文地址:https://www.cnblogs.com/qingtiao/p/10293328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!