函数作用域

<script>
/*
*函数作用域
* - 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
* - 每调用一个函数就会创建一个新的函数作用域,他们之间是互相独立的*
* - 在函数作用域中可以访问到全局作用域的变量
* - 在全局作用域中无法访问到函数作用域的变量(声明)
* -当在函数作用域中操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用
* 如果没有则向上一级作用域中寻找,直到找到全局作用域。 如果全局作用域中依然没有则会报错ReferenceError
*/
//创建一个变量
var a = 10;
function fun(){
var a = 我是函数中的变量a;
var b = 20;
console.log(a =+a);
}
// fun();//显示
// console.log(b =+b);//在函数中声明在全局中访问

/*
*若想再在函数中找全局中的a----输入window.a方可打印全局的a的值--使用window对象
*/



/*
*在函数作用域中也有声明提前的特性,
* 使用var关键词声明的变量,会在函数中所有的代码执行之前被声明

function fun3(){
var a;
console.log(a);

a = 35;//var a;a=35是未赋值的

}
fun3(); */

/*
*函数声明也会在函数中所有的代码执行之前执行、、相当于函数中的全局声明函数,,,,只是周期短fun3()调用完了就执行完了。但在全局中声明函数周期是script
*/

function fun3(){
fun4();
// console.log(a);

var a = 35;

function fun4() {
alert(I'm fun4);
}

}
fun3();

/*
*在函数中,不使用var声明的变量都会成为全局变量
*/
var c = 33;
function fun5(){
console.log(c =+c);//函数中没有向上一级找var c = 33;
c = 10;
}
fun5();
//在全局输出c
console.log(c =+c);//打印显示10




</script>