• JavaScript权威设计--JavaScript变量,作用域,声明提前(简要学习笔记四)


    1.宿主对象与宿主环境
    宿主对象:由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象。所有的BOM和DOM都是宿主对象。
     
    宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序。如:web浏览器等。
     
    2.日期的转换
    var  now =new Date();
    typeof(now+1)    //string
    typeof(now-1)    //number
    now==now.toString();    //true
    now>(now-1)    //true    '>'将日期转换为数字
     
    3.变量的声明
    var i;
    var sum;
    或者
    var i,sum;
    这些没有赋初始值的对象,初始值就是undefined
     
    4.在函数体内,局部变量的优先级高于同名的全局变量。并且同名局部变量会修改(覆盖)全局同名变量的值。
    var a="glo";
    function check(){
        var a="ble";
        return a;
    }
    check();    //ble

     

    5.函数作用域与声明提前
    分析一个例子,如下:
    var scp="glob";
    function f(){                
        console.log(scp);    //输出"undefined",而不是"glob"
        var scp="loca";        //在这里初始化
        console.log(scp);    //输出"loca"
    }
    理解:可能你觉得为什么第一个输出是"undefined",你可能觉得应该输出"glob"。因为scp上面定义的是全局变量啊。
    全局变量在js中的任何地方都是起作用的,为什么这里出问题了呢?
    首先,正如第四点所说。全局变量scp与局部变量scp同名,所以局部变量scp覆盖全局变量scp.
    然后,你又困惑,代码当时不是只是执行到第一个输出语句么,还没执行到下面的var scp="loca"么?这时我们要明白一点。
    js的函数作用域是指在函数内声明的所有变量在函数体内部是可见的!
    正如这个例子,函数内部定义的scp无论是在var scp="loca"上面还是在下面。是都存在的!
    如果你不信,你可以这么测试一下:
    <script >
    a();
    function d(){
        console.log(b);
    }
    </script>
     
     
     
     
    如果b没有的话,显示的没有被定义而不是输出"undefined"
    我们上面说过函数声明后没有赋初始值,默认其初始值就是"undefined"。
    可见f()函数内部 scp 是存在的。只是没有初始化。直到后面初始化"loca"。
    其实上面的例子真是的情况应该是这样:
    var scp="glob";
    function f(){ 
         var scp ;             
        console.log(scp);    //输出"undefined",而不是"glob"
        var scp="loca";        //在这里初始化
        console.log(scp);    //输出"loca"
    }
    scp 这种情况也叫“声明提前”。
     
    下面这种情况有点意思!
    var a=1;
    function b(){
      a=2;
      return;
      function a(){}      
    }
    //调用
    b();
    console.log(a)    //a=1

     

  • 相关阅读:
    微信小程序中 数据缓存
    javascript 数组去重方法
    常用网站 ---总结
    vue面试题
    vue创建项目(命令方式)
    shutil 模块:文件复制.移动.压缩.解压.递归删除文件夹
    面向对象一些零散的知识点
    面向对象之多态
    面向对象与继承
    序列化与反序列化的三个模块:json pickle shelve
  • 原文地址:https://www.cnblogs.com/zqzjs/p/4796242.html
Copyright © 2020-2023  润新知