js学习笔记

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);



原文地址:https://www.cnblogs.com/y896926473/p/10941085.html