一、在JS中,做用域就是指 执行代码的上下文。函数
二、有三种类型的做用域:spa
三、在全局做用域中定义的变量,从任何地方均可以访问,由于它是做用域链中最高层(最后一个)。它的生命周期将跨越整个程序。在JavaScript中没有使用 var 关键字声明的变量都是全局变量。code
四、在函数内部使用 var 定义的变量,其做用域是局部做用域,局部做用域 只对该函数的其余表达式是“可见的”,包括嵌套/子函数中的代码。函数的参数、以及arguments对象,都是属于局部做用域。对象
//全局做用域 var myVal = 0; var func = function(){ //局部做用域 var myVal = 1; var myFunc = function(){ //局部做用域 var myVal = 2; } } //eval做用域 eval('var a = 3');
五、JavaScript中,没有块级做用域。如 if/for 没法建立做用域,所以变量能够相互覆盖(除ES6中新语法)。blog
六、在函数中声明局部变量,必须使用 var 关键字,不然变量将会是全局变量。在函数体内 ,局部变量的优先级比同名的全局变量高。生命周期
七、做用域在函数定义时确认,而非调用时。这也叫词法做用域。ip
八、动态做用域 只存在于代码执行过程当中作用域