本篇来源:像天天骑共享单车同样,不知道本身为何可以掌握平衡,也不记得是如何学会的。曾经还有一些特殊技能(以下图),如今也不会了。只会慢悠悠的骑着。。。JS基础也有这种用进废退的感受,这种感受很是很差。碰巧翻出了一本老书《Javascript核心概念及实践》,因而便结合笔记以及一些曾经记录的碎片知识总结了这篇JS基础。html
Javascript简述
一丶语言特性
Javascript是一门动态的、弱类型、基于原型的脚本语言。
- 动态性:对象在声明时不须要定义属性及类型。能够随时更改对象结构。
- 弱类型:变量在声明时不须要指定数据类型。类型和值是关联的而不是和变量关联。
- 基于原型:每一个对象都有prototype属性,即原型。
二丶基本概念
1.数据类型
- Javascript中数据类型分为两种:
- 基本数据类型(string,number,boolean,underfined,null)
- 对象类型(object,array,function)
- 数据类型间的转换:
- 手动:Object.stringify(OBJ)、Object.parse(str)、valueOf()、toString()等方法
- 自动:例如:if(判断条件)时,判断条件若是不是布尔值会自动转换为布尔值。
- 检测数据类型:typeof、instanceof
2.变量
- 变量的定义:变量是对值在存储空间的引用。
- Javascript中数据类型分为两种:
- 基本类型:变量直接访问数据值(栈)
- 引用类型:变量是其引用地址,指向数据存储的位置(堆)
三丶对象和原型
1.JS中的对象
- 定义:对象是属性的集合(以及一个原型对象)
- 对象的属性:K-V对
- K:属性的名字,是一个字符串
- V:属性的值,任意JS对象
- 全局对象
JS引擎在初始化时,会构建一个全局对象。在浏览器环境中,这个全局对象就是window对象。全部在顶级做用于下生命的变量均可以看做window对象的属性。
2.原型
- 原型对象和原型链
- prototype: 每一个对象都有一个prototype属性,叫作原型对象.它是一个对象或null,
- __ proto : 每一个实例函数都有一个 proto __属性,叫作原型.它其实就是构造函数的prototy.
- constructor 每一个原型对象都有一个constructor属性,叫作构造函数.也就是咱们进行面向对象编程过程当中定义的构造函数.
- 原型链:
在 JavaScript 中,若是想访问某个属性,首先会在实例对象的内部寻找,若是没找到,就会在该对象的原型(__ proto __)上找,咱们知道,对象的原型也是对象,它也有原型,若是在对象的原型上也没有找到目标属性,则会在对象的原型的原型上寻找,以此内推,直到找到这个属性或者到达了最顶层null。在原型上一层一层寻找,这便就是原型链了。
- 继承
因为原型链查找是之下而上的,返回最早遇到的属性。经过这个机制能够完成继承和重载
3.面向对象:
面向对象的思想是将待解问题抽象为程序中的对象。而后经过对象间的协同合做完成功能,经过功能的集合完成整个项目
编程
四丶函数
在Javascript中函数自己也是对象,与其余任何内置的对象同样.
1.函数对象
- 建立函数是什么?
在全局做用域下,建立函数的过程其实就是对全局对象添加一个属性的过程,只不过属性的值是一个函数类型的对象.其余做用域也是如此.
- 建立的方法
- var fuc=new Function()
- function fuc(){}
- var fuc = function(){}
2.函数的参数
- 函数对象在生成时,产生一个类数组对象--arguments.不管函数是否有形参,实参都会以数组的形式,保存在这里.
3.函数做用域
- Javascript中的做用域为词法做用域,即在定义(预编译)阶段就肯定下来了,并不是在执行阶段肯定的.详情
- Javascript的函数在局部做用域内运行,若内部对变量没有定义,能够访问外部变量.
- 调用对象:在一个函数执行的时候,函数的参数和其局部变量最做为函数调用对象(this指向)的属性就行存储.能够理解为存储做用域信息的对象
- 做用域链能够看作调用对象组成的链式结构.全局做用域下的函数做用域链上就会有两个对象--自身的调用对象+全局对象
JS执行过程
js中的函数做用域及预编译的理解 事件循环主要介绍JS解释执行过程当中同步,异步的执行过程
bash
JS预编译执行过程 做用域、做用域链闭包
1.语法分析
定义: 代码在执行前会被通篇扫描一遍,这个过程就作语法分析.app
2.预编译
3.解释执行
-
事件循环: 在JavaScript执行时,同步任务会被放入执行栈中依次执行.异步任务挂起,在返回结果时(一般是回调函数),放入任务队列.当执行栈的同步任务已经执行完成时,将最早进入任务队列的任务加入到执行栈中执行。去任务队列读取任务到执行栈中去执行,这个过程是循环往复的,这即是 Event Loop,事件循环。
-
执行栈:浏览器执行队列
-
任务队列:异步回调暂存
this相关
关于 this 的解释说明
定义:this关键字是一个对象.取决于当前调用该函数的对象,也就是执行时的对象。
- 使用 call 和 apply 时,若是给 this 传的不是对象,JavaScript 会使用相关构造函数(例如:new String())将其转化为对象
- bind 方法会建立一个新函数,新函数的 this 会永久的指向 bind 传入的第一个参数
- 箭头函数会从做用域链的上一层继承 this。同 bind 同样,箭头函数也很“顽固”,咱们没法经过 call 和 apply 来改变 this 的指向
闭包
做用域和上下文环境
闭包
很是不巧端午期间生病了,6.8日吐了整整一天,脱水有些严重.6.9晚上好不少了.不少东西没来得及整理细化.又得烂尾了,难受!!!!