4.1 基本类型和引用类型

5种基本类型:Undefined、Null、Boolean、Number和String,这5种基本类型是按值访问的,因为可以操作保存在变量中的实际的值。

引用类型:可能由多个值(这里的“多个值”应该是指对象和方法)构成的对象,是保存在内存中的。

4.1.2 复制变量值

当复制基本类型值的变量时,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。

当复制引用类型值的变量,也就是复制某个对象时,复制的是指针,复制结束后,两个变量实际上将引用同一个对象。

var obj1 = new Object();
var obj2 = obj1;
obj1.name = 'Natsu12';
console.log(obj2.name); // 'Natsu12'

题外话:当复制某个对象时,操作的是对象的引用;当在为对象添加属性时,操作的是实际的对象

4.1.3 传递参数

函数传递参数都是按值传递的(不是按引用传递),也就是说把函数外部的值传进函数的参数里,相当于把值从一个变量复制到另一个变量。

但由于复制变量也分为 -> 复制基本类型值 / 引用类型值,所以如果传的参数是一个对象,则对参数的操作还是能反应到函数的外部。

但是请注意:这时候参数依然是按值传递的,而非按引用传递的。

 

4.1.4 检测类型

typeof检测基本数据类型比较有用,但在检测引用类型的值时用处不大
使用instanceof来检 测是什么类型的对象

console.log(person instanceof Object); // 变量person是Object吗

A instanceof B:判断B.prototype是否在A的原型链上

4.2 执行环境和作用域

4.2.2 没有块级作用域

变量查询是首先在当前局部环境中搜索,如果找到了该标识符,则停止,否则沿作用域链往上搜索。

所以函数里局部变量会屏蔽掉全局变量。

被屏蔽之后如果要访问全局变量,则需要通过window.xxxx来访问。

《JavaScript高级程序设计》第4章 变量、作用域和内存问题的更多相关文章

  1. 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

      5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...

  2. javascript高级程序设计第四章 变量、作用域和内存问题

    变量包含两种,,基本类型和引用类型 基本类型是指一些简单的字段: 引用类型是☞由多个值构成的对象  引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置; 函数的参数 ...

  3. 《JavaScript高级程序设计》——第二章在HTML使用JavaScript

    这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...

  4. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  5. 精读《javascript高级程序设计》笔记二——变量、作用域、内存以及引用类型

    变量.作用域和内存问题 执行环境共有两种类型——全局和局部 作用域链会加长,有两种情况:try-catch语句的catch块,with语句. javascript没有块级作用域,即在if,for循环中 ...

  6. 《JavaScript高级程序设计》笔记:变量、作用域和内存问题(四)

    基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型的值指那些可能有多个值构成的对象. 动态的属性 var p ...

  7. JavaScript中变量、作用域和内存问题(JavaScript高级程序设计第4章)

    一.变量 (1)ECMAScript变量肯能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象. (2)基本数据类型是按值访问,可 ...

  8. javascript高级程序设计第3版——第4章 变量作用域以及内存

  9. 《JavaScript高级程序设计》读书笔记 ---变量、作用域和内存问题小结

    JavaScript 变量可以用来保存两种类型的值:基本类型值和引用类型值.基本类型的值源自以下5种基本数据类型:Undefined.Null.Boolean.Number 和String.基本类型值 ...

  10. JavaScript 高级程序设计 第5章引用类型 笔记

    第五章 引用类型 一.object类型 1.创建方法: 1.使用new 操作符创建 var person=new object() Person.name=”Nicholasa” Porson.age ...

随机推荐

  1. Oracle存储过程知识汇总

    基本语法篇: CREATE OR REPLACE PROCEDURE 存储过程名 //CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做ske ...

  2. SDUST 软件工程2016-作业4-A 百钱买鸡问题

    解决百钱买鸡问题原本并不困难,关键的是这道题对其进行了升级,测试数据太大,传统的解法,像三重循环,二重循环都会导致超时. 这道题正确的解法应该是结合数学方程进行化简,将其转化为1层循环: x+y+z= ...

  3. 封装document.ready方法

    function $(fn){ if(document.addEventListener){ //W3C document.addEventListener('DOMContentLoaded',fu ...

  4. Ajax异步刷新局部页面的小李子

    看到下面那幅图没有,我们要的是当点击确定以后,根据条形码搜索出商品信息,并且异步刷新右边页面:

  5. GUID,UUID

    <? class System { function currentTimeMillis() { list($usec, $sec) = explode(" ",microt ...

  6. 【推介】GitHub

    隆重推介:GitHub(https://github.com/) 作为开源代码库以及版本控制系统,Github拥有140多万开发者用户. 随着越来越多的应用程序转移到了云上,Github已经成为了管理 ...

  7. a 标签 跳转4种类型

    <a href=''  target=''>中的target有4种参数: '_self'   ,  '_parent'   ,  '_top'    和  '_blank' 在没有使用框架 ...

  8. PHP 学习笔记 01

    例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...

  9. [转]Oracle_ProC编程

    1.引言 由于PL/SQL不能用来开发面向普通用户的应用程序,必须借助其他语言或开发工具. 在Linux操作系统下应该用什么语言或开发工具来进行Oracle数据库应用的开发呢?本文将介绍2种方案:Pr ...

  10. 利用HttpModule开发asp.net页面、ashx等访问时session失效的统一处理入口

    web程序时,当使用session时总会出现失效而报“未将对象引用设置到对象的实例”的http 500错误,本人比较懒,不想每个地方都用try catch处理,就找到个用httpModule统一处理的 ...