美文网首页
JavaScript在浏览器运行时的作用域

JavaScript在浏览器运行时的作用域

作者: defphot | 来源:发表于2018-06-29 15:32 被阅读0次
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>Page Title</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    
    <body>
    
      <script>
        console.log(this); //>window...
    
        var a = 1;
    
        function test() {
          window.console.log(a); //>undefined
    
          var a = 2;
    
          window.console.log(a); //>2
        }
        test();
    
        //js运行环境是有一个全局命名空间
        //打开浏览器窗口,浏览器会在全局创建一个window对象,对象上绑定了浏览器属性和方法(客户端运行环境)
        //之后浏览器把我们的代码添加到window对象上(理因如此,我们实际上总是通过操作window对象控制浏览器的行为)
        //浏览器这一默认的行为 导致我们代码的顶级作用域始终是window 我们代码(我们认为的全局变量)实际上都会挂载到window对象上
    
        //下面语句具有等同效果:
        //var a = 1 <==> window.a = 1
        //function test() {} <==> let test = function() {} <==> window.test = function() {}
    
        //所以第一次console.log打印undefined的原因是:函数局部作用域没有a,会往上到上层作用域找,但是由于前面的a是定义在window下面的,上层作用域没有a,始终会找不到。
    
        //也可以这样理解,可以得到同样的结果。
        function topScope() {
          //相当于window
          let myWindow = {};
    
          //相当于 var a = 1;
          myWindow.a = 1;
    
          //相当于 function test() {...}
          myWindow.test = function () {
            console.log(a); //>undefined
    
            let a = 2;
    
            console.log(a); //>2
          }
          test();
        }
        topScope();
      </script>
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:JavaScript在浏览器运行时的作用域

          本文链接:https://www.haomeiwen.com/subject/cyyayftx.html