Web前端:JavaScript中的var与作用域

    作者:uakora更新于: 2020-05-10 14:19:45

    Web开发

      作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

      作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

      Javascript中没有块级作用域,“块级作用域”中声明的变量将被添加到当前的执行环境中

      if(true){

      varcolor="blue";

      }

      console.log(color);//"blue"

      functiontest(){

      if(true){

      varcolor="blue";//(当前执行环境为函数test的局部作用域,函数外部无法访问,内部可以访问)

      }

      console.log("blue");//"blue"

      functioninner(){

      console.log(color);//"blue"

      }

      inner();

      }

      test();

      console.log(color);//ReferenceError:colorisnotdefined

      在JavaScript中,由for语句创建的变量,即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。

      for(vari=0;i<10;i++){

      varcolor="blue";

      }

      console.log(i);//10

      console.log(color);//"blue"

      使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在with语句中,最接近的环境是函数环境。

      如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境。

      functionadd(num1,num2){

      varsum=num1+num2;//用var声明

      returnsum;

      }

      console.log(add(10,20));//30

      console.log(sum);//ReferenceError:sumisnotdefined

      functionadd(num1,num2){

      sum=num1+num2;//没有使用var声明

      returnsum;

      }

      console.log(add(10,20));//30

      console.log(sum);//30

      如果局部环境中存在着同名标识符,就不会使用位于父环境中的标识符。

      varcolor="blue";

      functiongetColor(){

      console.log(color);//undefined(变量提升)

      varcolor="red";

      console.log(color);//red

      console.log(window.color);//blue

      returncolor;

      }

      console.log('return:',getColor());//return:red

      console.log(color);//blue

      对于对象而言(其他也是一样的),在main函数中,对象的作用域为他所在的最近的一对花括号内。在后花括号处析构函数被调用;全局的对象的作用域为声明之后的整个文件,析构函数在最后被调用。另外,临时产生的对象在使用完后立即会被析构。

课课家教育

未登录