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;
    没有人能一路单纯到底,但是要记住,别忘了最初的自己!
  • 相关阅读:
    Java实现 LeetCode 802 找到最终的安全状态 (DFS)
    Java实现 LeetCode 802 找到最终的安全状态 (DFS)
    Java实现 LeetCode 802 找到最终的安全状态 (DFS)
    Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
    Java实现 LeetCode 803 打砖块 (DFS)
    Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
    Java实现 LeetCode 803 打砖块 (DFS)
    Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
    英文标点
    post sharp 与log4net 结合使用,含执行源码 转拷
  • 原文地址:https://www.cnblogs.com/LindaBlog/p/10984192.html
Copyright © 2011-2022 走看看