1.变量
变量:可以改变的量,往往用英文字母代替变量,并且区分大小写。
变量的定义(声明): var 加 字母 var a 我声明了一个变量叫a
变量的用途:变量其实是一个容器,起到临时存储数据的作用。
通过=进行赋值。 var a=12;
2.变量提升:变量提升是浏览器的一个功能,Js代码执行前,浏览器会给一个全局作用域window
Window分两个模块 一个是存储模块 一个是执行模块
存储模块 找到所有的var和function 关键字 给这些变量添加内存地址
执行模块,代码从上到下执行,遇到变量就会去存储模块查找,有和没有
有就看你赋值没有,赋值了就是后面的值 没有赋值就是undefined。
没有 结果就是xxx is not defined
3.作用域链:函数内部的变量被使用时,首先会在自己的私有作用域下查找是否有这个变量,有就直接使用,
没有就会向他的上一级查找,父级就使用父级的,父级没有就会以此继续向上查找直到window为止,
window有就使用没有就is not defined。这种查找机制我们叫作用域链。
4.堆内存
就是存放代码块的 存放形式有两种 一种是对象以键值对的形式存放
另一种就是函数 以字符串的形式存放
5.栈内存
函数执行的时候首先会开辟一个新的内存空间 叫栈内存(也叫环境或作用域)
6.基本数据类型 引用数据类型 区别
基本数据类型:undefined null boolean number string
引用数据类型:object array function
基本数据类型就是简单的操作值
引用数据类型会开辟一个新的内存空间把内存空间的地址赋值给变量
7.原型链
Duixiang.shuxing的时候 首先看这个属性是不是私有的 私有的就直接使用
如果私有的属性没有 就找公有的 公有的有就使用 没有就按照__proto__找他
的类上有没有 直接找到基类object 如果object没有就undefined了 这种查找机制
叫原型链
8.原型分析
1)首先类身上天生自带一个prototype的属性 属性值是对象
2)prototype 对象天生有一个constructor属性 属性值是类本身
3)实例天生有一个__proto__指向自己类的原型
9.this
this是js的一个关键字 指定一个对象然后去替代他 分两种情况
函数内的this和函数外的this 函数内的this指向行为发生的主体 函数外的this都指向window
函数内的this跟函数在哪定义没有关系只跟执行时的主体有关 带“.”的主体就是.前面的 不带.
就是window 找主体的时候就看这个函数(方法) 带不带“.”如果函数和方法执行了带“.”那么this
就指向“.”前面的对象 如果不带“.”就指向window 自执行函数里面的this 都指向window
5.给元素中的某一个事件绑定方法,当事件触发时,执行绑定的方法,方法中的this指向当前元素。
10.面向对象:面向对象就是通过函数封装得到一个类,通过这个类实例出一个子对象,在函数封装的过程中,
写在函数里面的属性是私有的 写在prototype里面的是可继承的公有属性,实例(对象)在操作自己自己属性的
时候会看属性是私有的还是公有的,私有的就直接使用,公有的就通过原型链(__proto__)查找。
函数:
函数在调用的时候,会形成一个私有作用域,内部的变量不会被外面访问,这种保护机制叫闭包。
这就意味着函数调用完毕,这个函数形成的栈内存会被销毁。