作用域:
作用域的类型:局部作用域,全局作用域。
全局作用域:
最外层定义的变量具有全局作用域,例如:
<script>
var temp = "hello"
function fun(){
console.log(temp);
}
fun(); //其返回的结果为hello
</script>
很明显全局作用域对任何的内部函数都可以访问。
局部作用域:
每一个函数作为作用域,在外部无法访问作用域中的变量,例如:
<script>
function fun(){
var temp = "hello";
}
fun();
console.log(temp); ReferenceError: innerVar is not defined
</script>
注:当一个函数内部声明变量时,一定要使用var命令,否则将视为全局变量!
作用域链:
我的理解,如果出现嵌套函数,就表示为作用域链。
<script>
tmpe = 'hello';
function func(){
var temp = 'hi';
function inner(){
var temp = 'gallo';
console.log(temp);
}
inner();
}
func();
</script>
以上三个作用域组成作用域链,当出现以上情况时:
执行console.log(temp)时根据作用域从内到外的顺序寻找,如果内层没有向上寻找,知道做外层没有时抛出异常。
声明:
<script>
function fun(){
console.log(temp);
var temp = 'hello';
}
fun(); //undefined
</script>
上述不报报错输出的是undefined,在输出执行之前变量被定义为全局变量,所以输出的是undefined.