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;

js基础——变量、作用域、内存的更多相关文章

  1. JS基础学习——作用域

    JS基础学习--作用域 什么是作用域 变量的作用域就是变量能被访问到的代码范围,比如在下面的这个js代码中,变量a的作用域就是函数foo,因此在全局作用域内的console.log(a)语句不能访问到 ...

  2. js的变量作用域

    js不支持块级变量作用域,而是包含它们的函数的作用域, 例如: function query() { ; ; i < ; i++) { var b = i; } return b + a; } ...

  3. js学习--变量作用域和作用域链

    作为一名菜鸟的我,每天学点的感觉还是不错的.今天学习闭包的过程中看到作用域与作用域链这两个概念,我觉得作为一名有追求的小白,有必要详细了解下. 变量的作用域 就js变量而言,有全局变量和局部变量.这里 ...

  4. JS基础语法---作用域

    作用域:使用范围 全局变量: 声明的变量是使用var声明的, 那么这个变量就是全局变量 全局变量可以在页面的任何位置使用 除了函数以外, 其他的任何位置定义的变量都是全局变量 局部变量:在函数内部定义 ...

  5. js的变量作用域 ,变量提升

    (function(){ a = 5; alert(window.a); var a = 10; alert(a); })(); 结果: undefined 10 代码等同于下面 var a = un ...

  6. 【 js 基础 】作用域和闭包

    一.编译过程 常见编译性语言,在程序代码执行之前会经历三个步骤,称为编译. 步骤一:分词或者词法分析 将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元. 例子:  var a = 2 ...

  7. 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存

    一   变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof     ...

  8. JS基础-变量类型和类型转换

    JS 变量类型 JS中有 6 种原始值,分别是: boolean number string undefined symbol null 引用类型: 对象 数组 函数 JS中使用typeof能得到哪些 ...

  9. Linux C/C++基础——变量作用域

    1.局部变量 局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点: 只有当执行到这句语句时,系统才为这个变量分配空间 在一个函数内定义,只 ...

随机推荐

  1. KNN最近邻算法

    算法概述 K最近邻(K-Nearest Neighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位.它是一个理论上比较成熟的方法.既是最简单的机器学习算法之一,也 ...

  2. Android手机控制电脑撸出HelloWorld

    最近在开发一个远程办公的软件. 昨天在手机调通,并且成功通过手机打开电脑上的Eclipse撸出来一个HelloWorld. 也许不久的将来, 下班后,拿着手机在家写代码了.工作时间直接变成24/24 ...

  3. BZOJ2802Warehouse Store题解

    链接 我太菜了,连贪心题都不会写... 贪心思路很简单,我们能满足顾客就满足他,如果满足不了,就看之前的顾客中 有没有需求比该顾客多的顾客,如果有的话改为卖给这位顾客会使解更优 所以我们用一个优先队列 ...

  4. TCPThree_C杯 Day1

    题解 或 正规题解 已经很详细,不再赘述. 跟着wjx打代码,不怕卡题. 忘开long long智障错误第四次左偏树

  5. hdu 1272 使用set和并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1272 这道题就是求图是不是连通无环,我觉得其实就是看看图是不是一棵最小生成树. 所以要是图满足条件,就必然有n个 ...

  6. pytorch 多GPU训练总结(DataParallel的使用)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_40087578/artic ...

  7. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛: B. Coin 【概率题】【数论】

    Bob has a not even coin(就是一个不均匀的硬币,朝上的概率不一定是1/2), every time he tosses the coin, the probability tha ...

  8. Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全

    [相关已翻译的本系列其他文章,点击分类里面的spring security 4] 上一篇:Spring Security 4 整合Hibernate 实现持久化登录验证(带源码) 原文地址:http: ...

  9. 在 Deepin 15.9 安装 KiCad EDA 5.1 (2019-05-30)

    在 Deepin 15.9 安装 KiCad EDA 5.1 Deepin (深度系统)是世界著名的 Linux 发行版. KiCad EDA 是世界最强大的开源 PCB 绘制软件. 尝试一:在深度商 ...

  10. Flask学习之十二 使用boostrap

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift 中文翻译地址:http://w ...