javascript高级06

1.局部变量与全局变量

局部变量:

局部变量的作用域只能在当前函数中

每一个函数中都可以声明定义名称相同的变量,而不被影响

 function test1() {
            //name变量在test1函数中
            //name变量是局部变量
            //局部变量的作用域只能在当前函数中
            //每一个函数中都可以声明定义名称相同的变量,而不被影响
            var name = "zhangsan";
            window.alert("name==" + name);  //name==zhangsan
        }
        //test1();
        /*   function test2() {
              window.alert("name==" + name);   //name==
          }
          test2();
   */
        /*   function test2() {
              var name = "lisi";
              //window.alert('name==' + name);   //name==lisi
              window.alert("quanju==" + quanju); //quanju==全局变量
  
          }
          test2() */

全局变量:

函数外声明定义的变量就是全局变量

网页中所有脚本和函数均可使用

 var quanju = "全局变量";
        function test1() {
            //name变量在test1函数中
            //name变量是局部变量
            //局部变量的作用域只能在当前函数中
            //每一个函数中都可以声明定义名称相同的变量,而不被影响
            var name = "zhangsan";
            window.alert("name==" + name);  //name==zhangsan
        }
        //test1();
        /*   function test2() {
              window.alert("name==" + name);   //name==
          }
          test2();
   */
        /*   function test2() {
              var name = "lisi";
              //window.alert('name==' + name);   //name==lisi
              window.alert("quanju==" + quanju); //quanju==全局变量
  
          }
          test2() */

如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量

 function test3() {
              testname = "没有声明的变量"; //是window 对象的变量【全局变量】
              window.alert('testname==' + testname);  //testname==没有声明的变量
          }
          test3();
          function test4() {
              window.alert('testname==' + testname);   //testname==没有声明的变量
          }
          test4(); */

函数参数只在函数内起作用,是局部变量

 function test5(myname) {
            window.alert('myname==' + myname);   //myname==张三
        }
        //test5('张三');
        function test6() {
            window.alert('myname==' + myname);   //test6不能用test5的参数
        }
        //test6('张三');

你的全局变量,或者函数,可以覆盖 window 对象的变量或者函数。

 window.doxname = 'dox';   // window 对象的变量
        var doxname = 'hello';    //全局变量
        function test7() {
            //全局变量会覆盖window 对象的变量
            window.alert('doxname==' + doxname); //doxname==hello
        }
        //test7();

2. 闭包

「函数」和「函数内部能访问到的变量」的总和,就是一个闭包。

错误的认识:1.闭包不是函数套函数

错误的认识:2.闭包中的函数是可以没有return语句

 function test1() {
             var local = "变量"; //局部变量
             function foo() {                   //foo函数
                 console.log(local);
             }
         }
test1();

闭包的作用:

闭包常常用来「间接访问一个变量」。换句话说,「隐藏一个变量修改权利

用局部变量别人又访问不到,怎么办呢?

暴露一个访问器(函数),让别人可以「间接访问」

 function test1() {
            var local = "变量"; //局部变量
            function foo() {
                return local;
            }
            return foo;
        }
        function test2() {
            //调用test1函数,得到foo函数,被t1接收
            var t1 = test1();
            //调用t1就是就是访问foo函数
            var val = t1();
            alert(val);
        }
test2();  //变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值