1.es5时代
es5时,JavaScript只有两个作用域:1.全局作用域;2.函数作用域。
(1) 全局:在es5中在函数外定义的(或在函数内但没有用关键字var赋值)变量均是全局变量。它们所处的作用域即全局作用域。
(2) 函数:在es5中,定义在函数内部用var定义的变量,所在的作用域为函数作用域。
(3)es5利用函数闭包,也可以模仿块级作用域。
2.es6时代
es6出来后,JavaScript有了三个作用域:1.全局作用域;2.函数作用域;块级作用域。
(1) es6出来后,全局变量和函数变量依然存在,最重要的是,有了块级作用域,即用let和const定义变量。
(2)有了块级作用域后,可以有效防止变量重命名,防止变量污染。
(3)let与const均为块级作用域,均不可重复命名。但const赋值的是常量,之后不可修改,let赋值的是变量。所以我们首推用const,在确定是变量时才用let。这样一是防止比变量被无意间修改(会有报错提示),二来符合函数式编程的理念,即不去改变值,只生成新的值(React中推崇函数式编程)。
网友评论