函数
1、var a=function(){} 声明变量a提升,后面的赋值没有提升。
2、function a(){} 整个函数对象都提升。
3、caonsole.log(a)
var a=function(){}
function a(){}
显示的是function a(){} 函数对象。第一个提升了变量,第二个提升了函数对象,对象覆盖变量。
4、caonsole.log(a)
function a(){}
var a=function(){}
显示的还是function a(){} 函数对象。第一个提升了函数对象,第二个提升了变量,第一个的函数对象就有相同的不变量了后者不影响前者,还是显示函数对象。
5、匿名函数自己调用自己的做用是避免产生全局变量。
6、闭包函数,外部函数定义的变量不会自动销毁。
面向对象
对象的做用:封装信息。
对象具有属性和方法。
面向对象:可以创建自定义的类型,很好支持继承和多态。
面向对象的特征:封装、继承、多态。
创建
对象字面量
var obj=new Object();
var obj={
name:‘liu’
}
后者就是用对象字面量来创建的对象。
工产模式
function st(age,name){
retuen a={
age:age,
name:name
}
}
var st1=st(11,“aaa”)
var st2=st(22,“bbb”)
构造函数创建对象
class es6新出的规范
原型 原型链
构造函数的属性和原型链的属重名时自己的优先级比原型链上的高。
属性名 in 构造函数名(对象)判断该构造函数里包括原型链上有没有改属性。
构造函数名(对象). hasOwnProperty(属性名 )判断改函数不包括原型链上有没有改属性。