在看了几本书之后的一些理解和自己的想法。
 
作用域,变量的作用范围
 
在ES6之前
变量的声明
 
只有var可以声明变量属于某个作用域,并且,也只有全局作用域和函数作用域。
(没有var声明的变量,属于全局作用域,在全局作用域里声明的变量,函数会成为全局的属性)
所有的变量,不是全局作用域的,就是函数作用域的;
如果用var 声明变量,并且是在函数中,那么这个变量就属于这个函数,否则,属于全局变量。
 
变量,函数的提升
 
在任何一个作用域中,都存在提升;
 
     对于一个声明,JS引擎进行处理和执行。
     所谓的处理,引擎首先会进行全局的扫描,遇到变量的声明(var 声明的变量)就会记录,遇到函数声明(function 关键字开头)也会进行记录,直到全局扫描完毕。然后,引擎开始从头执行,对变量进行修改,对函数进行调用。
     上边所谓的记录,就是提升行为。(如果学过C语言,就知道,函数,变量都要先定义,在使用,否则会报错,但是,js提升,可以理解为,不管你定义在哪里,都会被提升到使用的前面,也就是可以把使用写在定义前面)
     引擎会把声明的变量,函数声明记录到全局的作用域,记录有哪些变量存在,并对变量进行初始化赋值,undefined;为什么是记录到全局,而不是对应作用域,主要是因为,一开始扫描,就是扫描全局作用域,它只扫描一级, 它不会深入扫描,只扫描表面。这个其实很好理解,除了变量的提升,还有函数声明的提升,遇到function 关键字,js引擎只是简单的将其提升到最顶层,在全局作用域中定义的函数,它作用域就相当于二级,js引擎是不会在这个时候去扫描函数作用域的。
     对于函数作用域的提升,发生在函数被调用的之后,执行之前,同样会进行表面的扫描,记录附属于这个作用域的变量,函数。
     如果在一个作用域中遇到变量和函数名相同,那么,函数的优先级高,这个标识符任然是函数名。
 
ES6 
   对变量的声明多了,var ,  let ,const;
对于var的,没有变化,同ES6之前
  而let声明变量,const声明常量,对于这两个,他们有的是块级作用域,只要是 {   },围成的区域,就是块级作用域。
在块级作用域里,let,const声明的,都是对内可见,对外不可见。并且,都会附着在这个作用域上。并且,let 和const 不存在提升。
  let 和const 不可重复声明同一个标识符。(具体的相关内容参见ES6相关书籍)。
 
 以上的主要是参考你所不知道的JavaScript上,一本很厉害的书。
欢迎各位前辈指正,谢谢。
 
 
 

JavaScript 的 作用域的更多相关文章

  1. 浅谈JavaScript的作用域

    前段时间学了下JavaScript作用域,这个东西在JavaScript非常重要,也是JavaScript很基础的东西,正如少林里面基础武功,有了基础,才能学绝世武功. 作用域的作用是啥?一套设计良好 ...

  2. JavaScript变量作用域

    全部变量拥有全局作用域,局部变量拥有局部作用域(这里注意函数的参数也是局部变量) 1.在函数体内,局部变量的优先级高于同名的全局变量. 我的理解就是当你同时定义了同名的局部变量和全局变量时,函数体内返 ...

  3. 初探JavaScript(四)——作用域链和声明提前

    前言:最近恰逢毕业季,千千万万的学生党开始步入社会,告别象牙塔似的学校生活.往往在人生的各个拐点的时候,情感丰富,感触颇深,各种对过去的美好的总结,对未来的展望.与此同时,也让诸多的老“园”工看完这些 ...

  4. JavaScript的作用域与作用域链

    作用域 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.可以说,变量和函数在什么时候可以用,什么时候被摧毁,这都与作用域有关. JavaScript中,变量的作用域有全局 ...

  5. JavaScript的作用域和提升机制

    JavaScript的作用域和提升机制 你知道下面的JavaScript代码执行时会输出什么吗? 1 2 3 4 5 6 7 8 var foo = 1; function bar() {     i ...

  6. Javascript的作用域、作用域链以及闭包

    一.javascript中的作用域 ①全局变量-函数体外部进行声明 ②局部变量-函数体内部进行声明 1)函数级作用域 javascript语言中局部变量不同于C#.Java等高级语言,在这些高级语言内 ...

  7. 深入理解Javascript变量作用域

    在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数 ...

  8. 【转】javascript变量作用域、匿名函数及闭包

    下面这段话为摘抄,看到网上大多数人使用的是变量在使用的时候声明而不是在顶端声明,也可能考虑到js查找变量影响性能的问题,哪里用就在哪里声明,也很好. 在Javascript中,我们在写函数的时候往往需 ...

  9. 网易JS面试题与Javascript词法作用域说明

    调用对象位于作用域链的前端,局部变量(在函数内部用var声明的变量).函数参数及Arguments对象都在函数内的作用域中--这意味着它们隐藏了作用域链更上层的任何同名的属性. 2010年9月14日, ...

  10. 第一百零六节,JavaScript变量作用域及内存

    JavaScript变量作用域及内存 学习要点: 1.变量及作用域 2.内存问题 JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只 ...

随机推荐

  1. Windows平台下python2和3的兼容问题解决

    很多朋友都安装了python2和3,因为用些库例如scapy,不是scrapy,python3下面都是错,那么怎么让python2和3共存呢. 像一般的程序员,达到如下效果 Windows平台下的兼容 ...

  2. INFORMATION_SCHEMA.PROFILING

    24.18 The INFORMATION_SCHEMA PROFILING Table PROFILING表提供了语句分析信息. 其内容对应于SHOW PROFILES和SHOW PROFILE语句 ...

  3. Dede CMS如何在文章中增加“附件下载”操作说明

    1.进入后台--在"附件管理"中选择"上传新文件" 2.在"说明标题"输入要上传文件的名字,并在下面浏览找到要上传的文件,保存. 3.在&q ...

  4. 织梦CMS去广告方法 for DedeCMS V5.7

    DedeCms 5.7新版发布,下来上传至服务器安装完毕,点击进入后台登陆界面,怎么多了广告链,而且登陆界面也变了,以前可不带这样的啊.按步骤一步一步来去版权再去广告吧. 一,去处后台登陆页login ...

  5. 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

    前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...

  6. sqlmap详细使用 [精简]

    1. 基础用法: 一下./sqlmap.py 在kali和backtrack中使用sqlmap的时候,直接用:sqlmap ./sqlmap.py -u “注入地址” -v 1 –dbs   // 列 ...

  7. KNN算法介绍

    KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...

  8. 快速排序(Quicksort)的Javascript实现

    日本程序员norahiko,写了一个排序算法的动画演示,非常有趣. 这个周末,我就用它当做教材,好好学习了一下各种排序算法. 排序算法(Sorting algorithm)是计算机科学最古老.最基本的 ...

  9. Jmeter-WINDOWS下的配置部署

    前提:已配置安装JDK环境及已部署TOMCAT. 解压apache-jmeter-2.9.zip文件至目录,我的是D:\Program Files目录. 点击我的电脑----属性----高级----环 ...

  10. post和get方式区别

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.1. get是把参数数据队列加到提交表单的ACTI ...