什么是作用域?
什么是作用域,就是一个变量可以生效的范围。
变量不是在所有地方都可以使用的,而这个变量的使用范围就是作用域。
变量的作用域可以分为两种:全局变量和局部变量。
全局作用域
全局作用域是最大的作用域,在全局作用域中定义的变量可以在本页面任何地方使用。
在页面打开的时候,浏览器会自动给我们生成一个全局作用域window
,这个作用域会一直存在,直到页面关闭。
<script>
var outerVar = "outer";
function fn(){
console.log(outerVar);
}
fn();//result:outer
</script>
如以上代码所示,我们在fn()
函数里能够打印出变量outerVar
的值,因为outterVar
是一个全局变量,作用域是全局作用域。
局部作用域
局部作用域就是在全局作用域下面有开辟出来的一个相对小一些的作用域;在局部作用域中定义的变量只能在这个局部作用域内部使用,不能再这个局部作用域之外的地方使用;
在 JS 中只有函数能生成一个局部作用域,别的都不行,也就是局部变量只能定义在函数的{}
中;每一个函数,都可以说是一个局部作用域。
<script>
function fn(){
var innerVar = "inner";
}
fn();
console.log(innerVar);// ReferenceError: innerVar is not defined
</script>
如以上代码所示,我们在fn()
函数里定义变量innerVar
,当我们在fn()
外部打印innerVar
时会报错:ReferenceError: innerVar is not defined
即innerVar
未定义,因为innerVar
是一个局部变量,它的作用域是fn()
的{}
内部,所以当我们在fn()
以外打印它时是在它的作用域以外,故报错。
需要注意的是,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!
<script>
function fn(){
innerVar = "inner";
}
fn();
console.log(innerVar);// result:inner
</script>
网友评论