1、基本类型和引用类型
a = 1; b= a; b = 13; 结果 a = 1; b = 13;
a 和 b 没有关系
a = [1,2]; a 开辟一块引用空间存放[1,2] b= a; 把a的空间存放[1,2] 给力b 引用同一个引用空间 b.push(3); b改变同时a改变 结果 a = [1,2,3] b = [1,2,3] a 和 b共用同一个引用空间,所以b 改变。
2、var、function 声明的 都会提前默认的赋值underfind 变量提升。
3、变量提升解读
var a = 11, b = 12; function aa() { console.log(a,b) var a = b = 13; console.log(a,b) } aa() 结果 undefined 12 13 13 因为 b没有var 所以没有提升。还是会12,私有作用域a和外部没有关系。
f= funciotn() {return true} g= funciotn() {return false} ~funciotn() { if (g()) { f= funciotn() {return true} funciotn g() {return false} } } console.log(f()) console.log(g()) 结果 报错 g 在匿名function私有变量,g只是声明不能执行
4、事件循环机制
任务队列、消息队列、事件队列同属回调队列。
事件管理模块,settime 和 dom 事件。
主线和分线执行。
5、works
(1)创建一个worker对象
(2)向分线程发送消息
(3)在主线程中绑定一个回调函数
(4)分线程接受消息
(5)执行函数回传主线程
分线程不可更新界面,分线程不能执行window机制。不能跨域访问,适用长时间操作。
6、数据、内存、变量
数据:存储在内存中的特定数据。
内存:通电后产生的可存储的数据的空间。
包含栈和堆,栈对应的变量,堆对应的对象。
变量:变量名和变量值组成。每一个变量都对应一小块内存,变量名对应内存,变量值是内存中的数据。
var a = {'name': 1}; var b = a; a = 0x1; 对应内存的地址值 b = 0x1; 把a的引入内容拷贝一份给a.
7、隐式原型和显示原型
每一个函数对象都有一个prototype,即显式原型。
每一个实例对象都有一个__proto__,即隐式原型。
function Fn () {} Fn.prototype 显式 var fn =new Fn(); this.__proto__ = Fn.prototype; fn.__proto__ 隐式 Fn.prototype === fn.__proto__ // true
8、隐式转化
+ 字符串的拼接 "37" - 7 = 30 "37" + 7 = 337; num - 0 = 数字 num + "" = 字符串 == 和 === 类型相同 NaN 不等于 NaN new Object() 不等于 new Object()
9、this
var number = 2; var obj = { number: 4, fn1: (function() { this.number *= 2; number = number*2; var number = 3; return function() { this.number *= 2; number *=3; alert(number); } })(), db2: function() { this.number *= 2; }, } var fn1 = obj.fn1; alert(number); // 4 全局window.number 4 fn1(); // 9 私有number 9 没有释放 全局window.number 8 obj.fn1(); // 27 obj.number 8 alert(window.number); // 8 alert(obj.number); // 8 var fn1 = obj.fn1; alert(number); fn1(); obj.fn1(); alert(window.number); alert(obj.number);