• js 作用域 基础


         1.变量的作用域

    变量的作用域分为两种

    (1),全局作用域:在函数外,使用var声明变量,可以在任何作用域下访问————————————全局变量

    (2),函数作用域:在函数内,使用var声明变量,只能在当前函数中访问---------------------------------------局部变量(在函数作用域中,没有用var声明的变量,是全局变量,不推荐,在严格模式中会报错)

    function fn(){
      var a=b=c=2;
      //c=2   //没有加var
      //b=c   //没有加var
      //var a=b  //加var
    }
    fn();
    //console.log(a);

    在执行代码的时候程序是先考虑c=2 从右往左运算赋值 只需要看看这个变量有没有被声明;

    (3).js程序执行前,会将var的声明的变量提升到当前作用域的最前面,而赋值去不会提升;

    function fn(){
      //var b
      console.log(b);//undefined
      var b=2;
    }
    fn();

    在执行的时候,var b会被提升到当前这个作用域的前面,//var b    

    var c=3;
    function fun(){
      //当前作用域下没有c,会到上一级作用域寻找c
      console.log(c);//3
      c=5;//给全局变量c重新赋值为5
    }
    fun();
    console.log(c);//访问的是全局的c

    console.log(c)//为 5   访问的是全局变量,c=5(是全局变量)因此又重新赋值为5;

    fun()的值为3         他其实访问的局部变量,由于js为解释性弱语言,当前作用域没有c变量,所以他会在上一级作用域寻找c变量。作用域链;

    function add(a,b){
      //形参属于局部变量,不能被外部所访问
    }
    add(2,3);
    //console.log(a);
    */
    形参属于局部变量,不能被外部所访问,
    var m=5;
    function foo(m){
      //调用函数,实参赋值给形参,形参m就相当于局部变量
      //var m=1
      //往上去找m,找到的是当前作用域下的m,而不会去全局寻找
      m=m+7;//在原来的基础之上加1  m+=7
    }
    foo(1);
    //在全局作用域下,访问的就是全局的m
    console.log(m);//5

    实参给形参了一个值,而形参属于局部变量,所以函数体中所有的m都为局部变量,最后console。log访问的是全局变量。

  • 相关阅读:
    [转]测试的基本概念
    记录
    flash 与 程序通讯
    怎么正确的建立项目
    安装包的制作
    JS
    页面刷新定位
    [转]C#处理XML
    MSN机器人
    报表 的使用
  • 原文地址:https://www.cnblogs.com/klwblogs/p/13080658.html
Copyright © 2020-2023  润新知