引自

1. 变量的作用域(var与let的区别)

在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问。

ECMAScript 6 之前的 JavaScript 没有语句块作用域;相反,语句块中声明的变量将成为语句块所在函数(或全局作用域)的局部变量。例如,如下的代码将在控制台输出 5,因为 x 的作用域是声明了 x 的那个函数(或全局范围),而不是 if 语句块。

if (true) {
var x = 5;
}
console.log(x); // 5 如果使用 ECMAScript 6 中的 let 声明,上述行为将发生变化。
if (true) {
let y = 5;
}
console.log(y); // ReferenceError: y 没有被声明 2. 变量的提升
含义为: 先使用变量稍后再声明变量而不会引发异常, 但是提升后的变量将返回undefined值
变量提升即相当于:
var x;
console.log(x); // undefinded 示例:
/**
* 例子1
*/
console.log(x === undefined); // true
var x = 3; /**
* 例子2
*/
// will return a value of undefined
var myvar = "my value"; (function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
上面的例子也可以写成(相当于将var x; console.log(x))
/**
* 例子1
*/
var x;
console.log(x === undefined); // true
x = 3; /**
* 例子2
*/
var myvar = "my value"; (function() {
var myvar;
console.log(myvar); // undefined
myvar = "local value";
})();

由于存在变量提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这个习惯将大大提升代码的清晰度。

但是let变量为块级作用域,则不会存在变量提升

在 ECMAScript 6 中,let(const)将不会提升变量到代码块的顶部。因此,在变量声明之前引用这个变量,将抛出引用错误(ReferenceError)。这个变量将从代码块一开始的时候就处在一个“暂时性死区”,直到这个变量被声明为止。

console.log(x); // ReferenceError
let x = 3;
 

最新文章

  1. java web学习总结(五) -------------------servlet开发(一)
  2. 水平ListView类
  3. oracle之synonym小结
  4. IIS7/8 HTTP Error 500.19 错误 0x80070021
  5. Java时间转换类实现
  6. POJ 3684 Priest John's Busiest Day 2-SAT+输出路径
  7. HTML5 模拟现实物理效果
  8. JVM堆外内存随笔
  9. 机器学习算法(SVM)公开课4月25日开讲
  10. ListView中的Item点击事件和子控件的冲突或者item点击没有反应的解决的方法
  11. [React] Asynchronously Load webpack Bundles through Code-splitting and React Suspense
  12. elastic search internal
  13. 软件设计模式之适配器模式(JAVA)
  14. c语言 判断文件是否存在
  15. 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}
  16. html5 拖拽练习题
  17. 【BZOJ4543】[POI2014]Hotel加强版 长链剖分+DP
  18. python项目 配置文件 的设置
  19. nginx 初了解
  20. bzoj1660:[Usaco2006 Nov]badhair乱头发节

热门文章

  1. eclipse中设置tab为4个空格
  2. 第三周课程总结&实验报告
  3. Hadoop之集群搭建
  4. Android 获取视频照片与刷新媒体库
  5. c++中字符输入函数cin.getline在输入char与string时的不同
  6. vue路由在keep-alive下的刷新问题
  7. CompletableFuture引入
  8. Selenium 2自动化测试实战20(操作cookie)
  9. Oracle中 ORA-12704:字符集不匹配
  10. 原生js之addEventListener,removeEventListener