变量作用域与解构赋值
变量作用域
由于JavaScript的函数可以嵌套,此时,内部函数可以访问外部函数定义的变量,如果内部函数定义的变量和外部函数定义的变量相同,则内部函数的变量将“屏蔽”外部函数的变量
变量提升
function foo() { var x = 'Hello, ' + y; console.log(x); var y = 'siry'; } foo();
语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了,javascript引擎会自动提升y,提升变量y的申明,此时y为undefined
名字空间
全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。
减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中。
局部作用域
JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域,当我们为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量,如果我们定义常量引入const关键字代替
解构赋值
数组解构赋值
[a,b]=[1,2];
、
方法返回
function f(){ return [1,2] } let a,b; [a,b]=f();//a=1,b=2 function f1(){ return [1,2,3,4,5] } let a,b; [a,b]=f();//a=1,b=2 [a,,...b]=f1();//a=1;b=[2,3,4,5]
对象解构赋值
{a,b=1}={a:1,b:2}
数组解构赋值运用场景
变量交互、返回数组、对返回的数组结果只关心第一个,返回多个值,选择性的接受某几个变量