js作用域

78 阅读2分钟

作用域:指一个变量的作用范围

  1. 全局作用域:
  •    直接编写在script标签的js代码
    
  •    在页面打开创建,在页面关闭时销毁
    

在全局作用域有一个全局对象window,代表一个浏览器窗口,浏览器创建我们直接可以使用。

  • 创建的变量都会作为window对象的属性保存
  • 创建的函数都会作为window对象的方法保存 2.函数作用域:
  • 调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
  • 没调用一次函数就会创建一个新的函数作用域,他们之间是独立的
  • 在函数作用域可以访问到全局作用域的变量,在全局作用域无法访问到函数作用域的变量
1. var a = 10;
        //a是全局变量,全局变量在任何地方都可以被访问
        function fun() {
            console.log('a=' + a);//函数作用域能打印外边全局作用域出a = 10
            //也就是说里边函数作用域是可以访问到外边的全局作用域
        }
        fun()
        //fun()函数调用

2. function fn() {
            var b = 20;//在函数作用域创建一个变量
        }
        fn()
        console.log('b=' + b); //然后在外边全局作用域打印,会报错
//也就是说在全局作用域是无法访问到函数作用域
  • 当在函数作用域操做一个变量时,它会先在自身作用域寻找,如果有就直接使用;如果没有则向上一级作用域寻找,直到全局作用域没找到直接报错。
  var a = 10;//全局作用域
        function fun() {
            var a = "我是fun函数a";//函数作用域
            function fun1() {
                console.log('a=' + a);//,两个a变量,谁近访问谁
            }
            fun1();
        }
        fun();

在函数作用域中有声明提前的特征

  • 使用var关键字声明的变量,会在函数中所有代码执行之前被声明
function fun3() {
          //相当于console.log(a)在执行之前上边位置有个隐形的var a,但未有赋值,因赋值在console.log(a)下边了,所以打印出undefined。
            console.log(a);
            var a = 35;
        }
        fun3();
  • 在函数中,不适用var声明的变量都会成为全局变量
function fun3() {
            a = 35;

        }
        fun3();
        console.log(a);

  • 定义形参就相当于在函数作用域中声明了变量
 function fun3(e) {
 //相当于var e=‘’
           alert(e)
        }
        fun3();