作用域

/*
   /*  function abc(){
        // 当在函数中定义变量时,这个变量的作用范围仅在函数中
        var a=1;
        a++;
        console.log(a);
    }
    abc();
    abc(); */
    // 执行2遍以后,a的结果仍然是2
    // 每次执行函数abc,都会重新将a定义为1
    // 函数执行完成,定义在函数中变量a去哪里了?外面为什么调用不到
    // 外面调用不到的主要原因是因为a的作用范围仅在函数中,当函数执行完成后a就会自动被销毁

    



    // 我们认为定义在函数外面的变量,叫做全局变量
    // 定义在函数里面的变量,叫做局部变量
    // 那么局部变量都有哪些?
    // 在函数中使用var定义的变量一定是局部变量,参数也是局部变量


    /* function abc(){
        a=1;//a是全局变量
    }
    abc();
    console.log(a); */
    // a是全局变量还是局部变量
    // 早期的原生js不需要使用var就可以定义变量,因为他们认为window.变量,
    // 所有的变量都是window的属性,而window是可以省略的,所有没有var可以使用
    // ,但是到了ES5的后期, 严格要求的代码规范不允许无声明
    //就使用变量,没有var是不行的


  /*   var a=3;
    function abc(){
        console.log(a);//undefined
        // 在当前函数中使用var定义了局部变量,那么在当前函数中任何位置调用的都是
        // 局部变量
        // 全局变量是无法获取的
        var a=5;
        // console.log(a,"_________");
        // 局部变量不会覆盖全局变量
        // window.a就是全局变量a,后面的a是局部变量a
        // 在ES6中window.a也不允许使用了
        console.log(window.a+a);
    }

    abc(); */
    // console.log(a);//当在函数外打印变量,这个变量肯定就是全局变量
    // 定义的局部变量不会改变全局变量
    // 我们认为一旦在函数中定义了局部变量,那么这个局部变量名字如果和全局变量名相同
    // 全局变量将无法直接在函数中使用了,局部变量的优先级高



   /*  var a=3;

    function abc(){
        console.log(a);
        window.a=10;
    }
    abc(); */
    // 更改了全局变量a


    // 全局变量可以用来存储数据,局部变量一般都是临时使用,执行完成后会被销毁

    /* var a=3;
    function abc(a){
        // a是一个参数,参数也是局部变量
        console.log(a);//(1) 7  打印局部变量参数
        var a=10;//重新定义局部变量,参数被覆盖
        console.log(a);//(2) 10 打印重新定义的局部变量a
    }
    abc(7);
    console.log("a");//(3) "a" 这里的a是双引号引起了,所以这是字符a
    console.log(a);//(4) 3  这里的a是变量,因为在函数外打印的变量都是全局变量
    // 一旦函数中的局部变量名和全局变量名相同,在函数中使用的变量都是局部变量 */





   /*  var a=3;
    function abc(a){
        // 参数就是局部变量,虽然没有使用var,但是一旦是确定为参数,就相当于
        // 定义了一个局部变量   var a
        console.log(a);//10
        a++;
    }

    abc(10);
    console.log(a);//3 */
    // 

/*
var obj={a:1};
function abc(o){
// 没有更改局部变量
// o.a=10;
// 这里才是真正更改局部变量,更改变量的引用地址
o={a:10};

    }
    abc(obj);
    console.log(obj.a); */

/*
var a=1;
// 命名函数在代码中定义以后,script被执行时,会自动将函数放在堆中
// 并且将函数存储在栈中的全局变量,定义函数全局是最为优先,最早的
// 当代码执行到135行 var a=1时,才开始重新定义变量a,而这个变量a
// 与栈中的全局函数a重名,因此变量a就会覆盖全局函数a
function a(a){
console.log(a);//(2)
var a=3;
console.log(a);//(3)
}

    console.log(a);//(1)  1
    a(10);  //1不是一个函数所有报错
    console.log(a);//(4) */




    
  /*   var a;
    function a(a){
        console.log(a);//(2) 10
        var a=3;
        console.log(a);//(3) 3
    }

    console.log(a);//(1)  就是函数a
    a(10);
    a=1; //会将函数a覆盖,变成全局的a=1
    console.log(a);//(4)  1 */

    


   
</script>



<script>
   /*  console.log(fn1);

    var  fn1=10;
    // 这样会覆盖上面的fn1,这里覆盖以后,fn1函数
    console.log(fn1);

    function fn1(){
        console.log("aaa");
    } */
 
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值