zoukankan      html  css  js  c++  java
  • js基础——变量、作用域、内存

    1、new关键字创建的是引用类型;
    eg. var box = new Object();
         box.name = "Linda";//引用类型添加属性没问题
        alert(box.name);
    2、基本类型添加属性会输出undefined
    eg. var box = "Linda";
         box.height = 185;
       alert(box.height);//undefined
    3、复制变量值:基本类型复制值本身,引用类型复制地址。
    eg. 基本类型复制变量(即两个变量操作互不影响)
         var str1 = "Lee";
           var str2 = str1;
           str1 = "hello";
           console.log(str1);//hello
           console.log(str2);//lee
    eg. 引用类型复制变量(box和box2都是指向同一个变量,若是name属性改了,则box.name 和 box2.name的值都会相应改变)
            var str3 = new Object();
            str3.name = "Bob";
            var str4 = str3;
            console.log(str3.name);//Bob
            console.log(str4.name);//Bob
    4、传递参数:参数不会按引用传递(局部变量),直接按值传递,即使变量有基本类型和引用类型之分。
    eg.基本类型传递参数
      function fn(num) { //num是局部变量
             num += 10;
             return num;
           }
           var num = 50;
           var result = fn(num);
           console.log(result);//60
           console.log(num);//50 与上面的局部变量无关
    eg.引用类型传递参数
     function fun(obj) {
              obj.address = "四川";
            }
            var p = new Object();
            fun(p);
            console.log(p.address);//四川
    5、检测类型:
    1)typeof(一般用于检测数据类型)
    eg.       var ty = true;
            console.log(typeof ty);//boolean
    2)instanceof(检测是什么类型的对象:数组、字符串(特殊)等)
    eg.     var ty1 = [1, 25, 59, 265];
            console.log(ty1 instanceof Array);//检测是否是数组 true
            var ty2 = {};
            console.log(ty2 instanceof Object);//检测是否是对象 true
            var ty3 = /g/;
            console.log(ty3 instanceof RegExp);//检测是否是正则 true
            var ty4 = new String("Linda");
      var str = "hello";
           console.log(typeof str);//string
           console.log(str instanceof);//false
           var str2 = new String("hello");
          console.log(str2 instanceof String);//true
    6、执行环境和作用域
    执行环境定义了函数或变量有权访问的其他数据,并决定了各自的行为。
    全局执行环境就是最外围的指向环境,即window对象
         var box1 = "blue";
            function setBox(){
              console.log(box1);//访问全局变量
            }
            setBox();//执行函数
        var boxn="hello";
            function getBox(){
              console.log(window.boxn);//全局变量即window的属性
            }
            window.getBox();//全局函数即window的方法
    eg.通过传参替换函数体内的局部变量,但是作用域仅限于函数体内的局部环境
      var boxn="hello";
            function getBox(boxn){//通过传参替换了全局变量
              console.log(boxn);//WORLD
            }
            getBox("WORLD");
            console.log(boxn);//hello
    eg.每个函数调用时都会创建自己的执行环境,执行后把控制权交给上一级的执行环境
            var color="yellow";
            function setColor(){
              function getColor() { //getColor的执行环境在getColor内
                var color1 = "green";
                console.log(color);//yellow
                console.log(color1);//green
              }
              getColor();
            }
            setColor();
    7、没有局部作用域:if语句、for语句
    eg.var关键字在函数体内的意义
    function number(number1,number2) {
              var sum = number1 + number2; //此时sum是局部变量,去掉var就是全局,报错
              return sum;
            }
            console.log(number(15,20));
            console.log(sum);//报错 sum is undefined
    8、内存问题
    javaScript会自行管理内存分配及无用内存的回收
    一般来说确保占用最少的内存可让页面获得更好的性能,那么优化内存的最佳方案就是一旦数据不再有用,就将其设置为null来释放引用即解除应用.
    eg.var p = {
       name:"hello"
      }
      p = null;
    没有人能一路单纯到底,但是要记住,别忘了最初的自己!
  • 相关阅读:
    vscode 在linux中,切换语言模式快捷键
    转载大神的一篇文章----【如何选择开源许可证?】
    Kibana6.x.x——源码发布
    Kibana6.x.x——【Running "run:optimizeBuild" (run) task】出现警告信息
    linux系统为文件添加执行权限
    Kibana6.x.x——执行yarn build出现的警告信息记录
    Kibana6.x.x——导航权限控制入门
    poj 2187:Beauty Contest(计算几何,求凸包,最远点对)
    poj 2386:Lake Counting(简单DFS深搜)
    蓝桥杯 第三届C/C++预赛真题(10) 取球游戏(博弈)
  • 原文地址:https://www.cnblogs.com/LindaBlog/p/10984192.html
Copyright © 2011-2022 走看看