1、变量:

  ECMAScript中的基本类型都是值类型Boolean,Number,Null,Undefined和String,在这里JS和其他的语言有所不同,就是JS中的String是值类型

而不像其他语言一样String作为引用类型。在JS中引用类型的变量都可以动态的给他们赋值属性。如:

  var obj = new Object();

  obj.name = 'kim';

  alert(obj.name);//kim

还有一句话很重要:就是所有函数的参数都是按照值类型传递的。即使参数是一个引用类型的变量,也是按照值类型传递的,如:

  function setName(person){

    person.name = 'kim';

    persion = new Object();

    persion.name = 'jimmie';

  }

  var person = new Object();

  setName(person);

  alert(person.name);//kim(这里我也不是太明白,如果有那位大神看到了,请指点一下。万分感谢!!!)

如果我们要检测一个基本数据类型是那种类型那么我们最好使用typeof xxx 来检测,而如果要检测引用类型那么建议使用instanceof  yyy,

因为如果使用typeof检测引用类型,会出现:typeof null === 'object';type object === 'object',就是没有办法区分是那种引用类型。

2、作用域(执行环境)

  ECMAScript中执行环境就像java , c++等语言中的作用域类似,就是在执行环境中定义一些可供使用的变量和对象以及方法。在JS中

每一个执行环境都对应着一个对象,只是我们编码的时候不能访问到而已。

  ECMAScript中最大的执行环境就是全局执行环境,而是最外围的一个执行环境,根据ECMAScript中宿主环境的不同全局执行环境有所差别,

在浏览器中全局执行环境就是window对象。每一个函数有自己的执行环境,所以当进入一个执行环境的时候就会自动的定义一条执行链,链的前

端是最近的一个执行环境,而末端都是全局执行环境。

  ECMAScript中无论是函数中遇到一个变量(标示符),还是在全局中,都会自动的根据执行链上的顺序依次的从相应的执行环境中查找是否定义

了相应的标示符,所以函数中的变量会先在自己的执行环境中进行查找是否定义了这个变量,如果没有则会在外层函数中查找,直到最后的全局

环境变量中。

  var color = 'blue';

  function changeColor(){

    var anotherColor = 'red';

    function swapColor(){

      var tempColor = 'green';

      anotherColor = color;

      color = tempColor;

      //这里可以访问color,anotherColor,tempColor

    }

    //这里可以访问color,anotherColor但是不能访问tempColor

    swapColors();

  }

  //这里只能访问color------这就是所谓的闭包

  changeColor();       

javascript 高级程序设计 五的更多相关文章

  1. JavaScript高级程序设计(五): js的关键字instanceof和typeof使用

    JavaScript中instanceof和typeof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: 一.typeof 1.含义:typeof返回一个表达式的数据类型的字符 ...

  2. 《Javascript高级程序设计》阅读记录(五):第六章 上

    这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 <Javascript ...

  3. 《Javascript高级程序设计》阅读记录(三):第五章 上

    这个系列以往文字地址: <Javascript高级程序设计>阅读记录(一):第二.三章 <Javascript高级程序设计>阅读记录(二):第四章 这个系列,我会把阅读< ...

  4. 《Javascript高级程序设计》阅读记录(四):第五章 下

    这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较深入,而且实际使用价值较大的内容记录下来,并且注释上我的一些想法.做这个一方面是提升了我的阅读效果以及方便我以后阅 ...

  5. 《JavaScript高级程序设计(第3版)》笔记-序

    很少看书,不喜欢看书,主要是上学时总坐不住,没有多大定性,一本书可以两天看完,随便翻翻,也可以丢在角落里几个月不去动一下. 上次碰到了<JavaScript高级程序设计(第3版)>感觉真的 ...

  6. 《JavaScript高级程序设计》学习笔记(4)——引用类型

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第五章内容. 在ECMAScript中, ...

  7. 《JavaScript高级程序设计》学习笔记

    系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...

  8. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  9. JavaScript高级程序设计(读书笔记)(一)

    本笔记汇总了作者认为“JavaScript高级程序设计”这本书的前七章知识重点,仅供参考. 第一章 JavaScript简介 JavaScript发展简史: 1995年,JavaScript诞生 19 ...

随机推荐

  1. centos 下安装redis

    一.安装redis 第一步:下载redis安装包 redis下载地址 wget http://download.redis.io/releases/redis-5.0.3.tar.gz 第二步:解压压 ...

  2. h5内容初探

    h5简介: h5新特性 h5新增标签 article  和  section 的区别相当于 div  和  p标签的区别 1—6都是块级元素 h5新增属性 拖放 拖动事件 <style> ...

  3. Feign 注意事项

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...

  4. ORA-01555 snapshot too old

    假设有一张6000万行数据的testdb表,预计testdb全表扫描1次需要2个小时,参考过程如下: 1.在1点钟,用户A发出了select * from testdb;此时不管将来testdb怎么变 ...

  5. vs中更改项目名称注意事项

    1,项目属性中的所有需要改的地方,还有程序集名称. 2,解决方案用记事本打开更改启动路径. 3,重新加载即可.

  6. SQL Server 2008 R2官方中文版下载

    SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本. 在现今数据的世界里,公司要获得成功和不断发展,他们 ...

  7. macOS 为 Markdown 文件开启全文检索方法

    曾经的我一向使用 Evernote + 马克飞象来记载笔记和文档.不过感觉这两个东西越来越不思进取,几年都没什么变化.所以,一年多曾经,我就把一切笔记迁移成本地 Markdown 文件,合作 Drop ...

  8. 牛客网练习赛44-B(快速幂+模拟)

    题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...

  9. 最小生成树算法(krustra+prime)

    给你一个图,求让图连通的边权和最小值 krustra算法是基于加边法,将所有边权排序,每次加一条边,将两个点放在同一个集合中.如果新加的点不在同一个集合中,就合并(并查集) 涉及到排序,可以用结构体存 ...

  10. express 学习札记

    Enjoy yourself! 祝你玩得开心! I have no idea. 我没有头绪. I just made it! 我做到了!  I’ll see to it 我会留意的. Express ...