【新人报到】【学习笔记】JavaScript核心技术开发解密

作为学生党,初次发布文章,若有错误,望诸位指正!

学习书籍《JavaScript核心技术开发解密》

先列一个flag,日后不完成难免被打脸。

经过这近几天的学习,题主真切体会到学习语言要亲身实践,体会得到很多书本上没有的知识!

废话不多说,直接分享我的学习笔记了(虽然知识很low……)

1.三种常见的数据结构(完)
1.1 栈
1.2 堆
1.3 队列

栈和队列都是动态的集合
区别:栈:后进先出,队列:先进先出;栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。

定义一个栈

#coding:utf-8 typedef struct {
    ElemType *base;
    ElemType *top; int stackSize;
}sqStack;

这里定义了一个顺序存储的栈,它包含了三个元素:base,top,stackSize。

创建一个栈

#coding:utf-8 define STACK_INIT_SIZE 100 initStack(sqStack *s)
{
    s->base = (ElemType *)malloc( STACK_INIT_SIZE * sizeof(ElemType) ); if( !s->base ) exit(0);

    s->top = s->base; // 最开始,栈顶就是栈底 s->stackSize = STACK_INIT_SIZE;
}

实现一个栈

#coding:utf-8 function Stack(){ this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek;
}

用一个数组dataStore来保存栈内元素,变量top记录栈顶位置

push()方法

先来实现push()方法,当向栈中压入一个新元素时,需要将其保存在数组中变量top对应的位置,然后将top值加1:

#coding:utf-8 function push(element){ this.dataStore[this.top++] = element;//top值加1,指向下一个空位置 }

pop()方法

#coding:utf-8 function pop(){ return this.dataStore[--this.top];//pop方法与push相反 }

peek()方法

peek方法返回数组的第一个top-1位置的元素,即栈顶元素:

#coding:utf-8 function peek(){ return this.dataStore[this.top-1];
}

length()方法

length方法通过返回变量top值的方法返回栈内的元素的个数:

#coding:utf-8 function length(){ return this.top;
}

clear()方法

将变量top的值设为0,就可以清空一个栈:

#coding:utf-8 function clear(){
    this.top = 0;
}

2.内存空间(完)
类型 值
Boolean 只有两个值:true/false
Null 只有一个值:null
Undefined 只有一个值:undefined
Number 所有的数字
String 所有的字符串
Symbol ES6的新成员,一种独一无二的标记,避免属性命名时候的冲突

引用数据类型和堆内存空间
需要注意的是,在JavaScript中是不允许直接访问堆内存中的数据,实际上操作的是对对象的引用而不是实际的对象,比如浅拷贝深拷贝,可以进行的操作是保存引用,然后进行值传递操作。

#coding:utf-8 //demo.js var a = 20; var b = a;
b = 30;

//问此时的a值是多少?

#coding:utf-8 //demo1.js var m = {a:10,b:20}; var n = m;
n.a = 15;

//问此时的m.a值是多少?

分析:当变量对象进行复制时,新的变量会被创建一个内存空间,同时保存引用后分配到一个新的值,修改行为和复制行为是相互独立的,因此修改b值以后a值不会发生变化。

搜狗截图20180616032711.png

3.执行上下文(完)
JavaScript的运行环境主要有:全局环境,函数环境,和eval环境(不建议使用,这里不做介绍 )
划重点:JavaScript引擎会以栈的形式处理,栈底永远是执行全局上下文,栈顶则是当前正在执行的上下文
具体实现:当代码执行中遇到以上几种情况时,都会生成一个执行上下文(也叫执行环境或者环境,JS高设3有讲)并把这些
代码放入到执行栈里面,处于栈顶的上下文执行完毕后,就会自动出栈。

实例1

#coding:utf-8 var color = "blue1"; function changeColor(){ var anotheColor  = "red"; function swapColors(){ var temp = anotherColor;
     anotherColor  = color;
     color = temmp;
  }
  swapColors();
}

changeColor();

描述:
1.png

图一 JavaScript执行栈的入栈操作过程

JavaScript执行栈出站的过程:1.swapColor()出栈,2.changeColor()出栈,最后只剩全局作用域变量

实例2

#coding:utf-8 function f1(){ var n = 999; function f2(){
    alert(n);
   } return f2();
} var result = f1();
result(); //999 

这是闭包的例子,有点迷惑性

2.png

图二 f1入栈操作过程

这时候,因为f2()只是声明而没有执行函数或者划分函数空间,估不会产生上下文,f1()执行完毕,出栈。
3.png

图三 result EC入栈操作过程

result()执行完毕,出栈,整个过程结束。

声明周期

划重点:当调用一个函数的时候,就会创建一个执行上下文(也叫执行环境,或者环境),声明周期大致分成两个阶段:创建阶段和执行阶段

创建上下文:创建变量对象,确认作用于域链,确认this指向
执行上下文:变量赋值(值传递),函数引用,执行其他代码

执行完毕后,创建的内存等待被回收.


欢迎指正,下面待续。。

4.变量对象

5.作用域与作用域链

6.闭包

7.this

8.函数与编程式编程

9.面向对象

10.ES6与模块化


#Java#
全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务