1.变量的声明和初始化

  必须使用关键字 var,后跟变量名,后面还可以跟一个赋值表达式。

  var name;

  var age = 5;

  var str = 'hello';

  var flg = false;

2. javascript 中的算术运算和数学库函数

  +(加)

  - (减)

  *(乘)

  / (除)

  %(取余)

  可以使用的数学库:

  

 3. 判断结构

  1) if else

  2) switch

  没有特别之处

4.循环结构

  1)while

  2) for

5. 函数

  1)有返回值的

  2)无返回值的

6. 变量作用域

  变量作用域是指,一个变量在程序的哪些位置可以访问。

  javascript中的变量作用域被定义为函数作用域,是指变量的值在定义该变量的函数内是可见的,并且在该函数内的嵌套函数中也可访问该变量。

  言外之意就是指javascript中没有块级作用域(通过大括号{}来分割作用域的方式是无效的)。

  1. function showScope(){
  2. // 这里返回的是父级作用域里面的scope的值
  3. return scope;
  4. }
  5.  
  6. var scope = "global";
  7. console.info(scope);// global
  8. console.info(showScope());// global

上面的showScope中并没有定义scope这个变量,但是调用时依然反悔了global,就是业务在其父级作用域中定义过这个变量,这里将其返回。

  1. function showScope(){
  2. var scope = 'local'; // 在函数自己的作用域内定义scope变量
  3. return scope;
  4. }
  5.  
  6. var scope = 'global';
  7. console.info(scope); // global
  8. console.info(showScope()); // local

在函数内部自己定义了scope变量,返回时是返回自己作用域中的scope内容,和父级作用域中的同名变量无关。

  1. function showScope(){
  2. scope = 'local'; // 这里是修改了父级作用域中的scope值
  3. return scope;
  4. }
  5.  
  6. var scope = 'global';
  7. console.info(scope); // global
  8. console.info(showScope()); // local
  9. console.info(scope); // global

在函数中没有定义新的scope变量,等于是修改了父级作用域中scope的值,所以在调用了一次showScope方法后,父级作用域中的scope的值也发生了改变。

 7. 递归

先来看个求阶乘的函数

  1. function factorial(number) {
  2. if (number == 1) {
  3. return number;
  4. }else {
  5. return number * factorial(number- 1);
  6. }
  7. }
  8. console.info(factorial(5));

数字1的阶乘就是1本身,其他情况下都是这个数字number去乘以number-1的阶乘。

我通过自己的递归调用可以一直求到number=1时的阶乘为止, 如所示:

  1. factorial(5) —>
  2. 5 * factorial(4) —>
  3. 5 * 4 * factorial(3) —>
  4. 5 * 4 * 3 * factorial(2) —>
  5. 5 * 4 * 3 * 2 * factorial(1) —>
  6. 5 * 4 * 3 * 2 * 1

8. 对象和面向对象编程

javascript也是一种面向对象的语言,我们可以定义对象,在其中设定私有、共有属性或方法,如下:

  1. function Person(name, age){
  2. var name = name; // private
  3. this.age = age; // public
  4.  
  5. this.getName = function(){
  6. return name;
  7. };
  8. }

在Person这个函数中,name为私有属性,在函数外是访问不到的;age为共有属性,其对象可以直接访问;getName()为共有方法,可以通过对象直接访问。

  1. var john = new Person('john', 18);
  2.  
  3. john.age ->18
  4. john.name -> undefined
  5. john.getName() -> john

  

javascript 数据结构和算法读书笔记 > 第一章 javascript的编程环境和模型的更多相关文章

  1. javascript 数据结构和算法读书笔记 > 第二章 数组

    这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...

  2. javascript 数据结构和算法读书笔记 > 第四章 栈

    1. 对栈的操作 栈是一种特殊的列表,栈中的元素只能通过列表的一端进行访问,即栈顶.类似于累起一摞的盘子,只能最后被放在上面的,最先能被访问到. 就是我们所说的后入先出(LIFO). 对栈主要有入栈p ...

  3. javascript 数据结构和算法读书笔记 > 第五章 队列

    队列是一种列表,但是它只能够在队尾插入元素,在队首删除元素.队列用于存储按照顺序排列的数据,先进先出.而栈则是后入栈的元素反而被优先处理. 实际中一般被应用在进程池.排队操作上面. 1. 队列的操作 ...

  4. javascript 数据结构和算法读书笔记 > 第三章 列表

    1. 结构分析 列表首先要有以下几个属性: listSize 长度 pos 当前位置 dataStore 数据 我们要通过以下方法对上面三个属性进行操作: length() 获取长度 | getPos ...

  5. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  6. 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式

    本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...

  7. 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表

    本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...

  8. 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合

    前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...

  9. 为什么我要放弃javaScript数据结构与算法(第五章)—— 链表

    这一章你将会学会如何实现和使用链表这种动态的数据结构,这意味着我们可以从中任意添加或移除项,它会按需进行扩张. 本章内容 链表数据结构 向链表添加元素 从链表移除元素 使用 LinkedList 类 ...

随机推荐

  1. JSP总结1

    JSP: JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动 ...

  2. Windows 端口和任务 查看 相关命令

    netstat -aon|findstr " //查看端口 tasklist|findstr " //根据PID找到对应的程序 taskkill /f /t /im netbox. ...

  3. JAVA多线程下,获取递增的序列号

    场景描述: 1,目前我们的系统可以简单归纳成MVC的架构模式 2,每个前端的请求过来,都会在C层开启事务,最后处理结束后,也在在C层关闭事务(实际是在C层的底层统一做了事务的开启和提交):      ...

  4. ORACLE集合常用方法

    集合方法pl/sql预定义了在varray 和嵌套表实例上进行调用的方法.这些方法能在集合上执行一定的功能. EXISTS 该函数返回集合中第一个元素的索引,如果集合为空,返回NULL Collect ...

  5. jquery 鼠标右键事件、左键单击事件判定

    $(function(){ $('a').mousedown(function(e){ alert(e.which) // 1 = 鼠标左键 left; 2 = 鼠标中键; 3 = 鼠标右键 retu ...

  6. win32程序调试OutputDebugString 类似printf格式化输出

    有没有win32编程因为打印变量调试程序而头疼呢.方法二的函数完全类似printf.非常完美.方法一:不带参数输出如printf("hello world"); OutputDeb ...

  7. PHP学习笔记,自己动手写个MVC的框架 -- base所有代码

    <?php /** 名称:基础类 作用:引用参数处理类,加载基础配置, 作者:swordphp@126.com 创建日期:2013-07-31 **/ require_once(ROOT_PAT ...

  8. arrayAccess的接口使用

    <?php //get the methods instance of ArrayAccess //get the properties instance of ArrayAccess $ref ...

  9. css3的盒子模型布局

    写在前面的话: css3盒子布局,可以更简单直观的均分页面某一个div,并且还可以达到均分后的每一个元素中的内容上下居中.左右居中,但是该模型对浏览器的版本有要求: { display: -webki ...

  10. MYSQL delete性能优化!

    优化项 1. low_priority 当没有连接文章表时才进行删除操作. delete low_priority from T; 优化项 2. quick 当删除行时并不删除行的索引.如果再次插入这 ...