1.函数的定义方式
2.预解析:声明提升 先var 再function,只提升声明不提升赋值
3.变量的作用域:1.局部变量 2.全局变量
4.作用域:(在其他语言中 java php .net )块级作用域{代码块}
JS没有块级作用域只有函数作用域 function (){局部—代码块,这个局部变量必须有var的声明,如果没有 var,那么在外部也是可以访问到的}
5.(难点)作用域链:如果一个变量没有声明,那么在赋值的过程中会一直找,直到找到为止。—以后在项目中可能会出现赋值之间的相互影响!
执行过程
1.先全局找声明, var undefined function fn(){},提升声明;
2.在全局中找执行 var a = 10; fn();
3.如果有fn(){},在全局中开辟局部的作用域;
4.在局部中再找 var undefined function
5.如果var 有赋值,如果没有就继续在全局中找,这就形成了作用域链
6. 内置对象:document DOM
Window 视窗 DOM BOM
*window.onload 先加载DOM BOM
Open是有返回值,就是打开的window close(返回值)
Location.href =””;动态的打开链接
setTimeout(回调函数,time)
函数作为参数进行传递
(一)课程目标
1.数组
2.原型属性
3.*值类型与引用类型*
4.对象
5.对象的工厂模式
6.日期对象
(二)数组
3.1数组的定义:1.构造函数 2.数组字面量
3.2数组的赋值与取值
通过下标进行赋值
通过下标进行取值
3.3 数组的函数
value0f();返回数组对象本身
toString();把每一项提取,用,拼接
join();把每项提取出来,传入参数拼接
arr instanceof Arrary 变量数据类型
ES5: Array.isArrary(arr); 低版本浏览器不支持
添加和删除值
push(arg);往后添加一个值,
pop();删除后面的项
shift();从前面删除
unshift(arg);从前面添加
注意:push pop shift unshift具有返回值
indexOf();找到某个元素出现的位置
lastIndexOf();找到某个元素最后出现的位置
indexOf(要找的元素,从哪一项开始)
sort();排序函数— 通过回调函数排序
var arr = [2,5,6,8,12,21];
arr.sort(function(a,b){
return a-b;
})
通过比较函数
1.如果 a –b < 0 那么 a在b的前面
2.如果 a – b = 0 ,那么a和b的位置不变
3.如果a – b >0,那么a 在b的后面
Reverse() ,反转数组
Filter(function(element,index,array){
})
通过过滤函数过滤的数组不会影响原来的数组!
Slice(0,1);截取数组,复制一份返回,不影响原数组;(开始,结束)
Splice(2,2);截取数组,会影响原数组;(开始,几个)
forEach(function(ele){
console.log(ele);
});
(三)原型属性
Prototype:就相当于创建这个对象的“模子”;一旦对对象通过原型属性创建之后,以后通过这个对象的原型创建的属性和方法都具有相关特征。
(四)*值类型与引用类型*
简单数据类型:值 var a = 10;
复杂数据类型: var stu = new Object();
4.1 值类型把变量和值保存在栈中;
引用类型把变量和值分别保存在栈和堆中;
值类型
var a = 10;
var b = a;
a = 20;
console.log(a);
console.log(b);
引用类型
var stu01 = new Object();
stu01.name = "zs";
stu01.age = 20;
var stu02 = stu01; //复制引用(地址)
stu02.name = "ls";
console.log(stu01.name);
console.log(stu02.name);
4.2 基本类型做参数:把实际参数赋值给形式参数
var num = 10;
function fn(num){
num = 20;
console.log(num);
}
fn(num);
console.log(num);
引用数据类型做参数:把实际参数的引用赋值给形式参数
var stu01= new Object();
stu01.name = "zs";
console.log(stu01.name);
function fn(stu){ //传递的是赋值
stu.name = "ls";
console.log(stu.name);
}
fn(stu01);
console.log(stu01.name);
总结:数据类型做参数,基本数据类型会复制一份直接给参数使用,不影响本身的值;
引用类型作为参数进行传递,都指向的是同一个内存空间,作为参数的修改会影响原来的值!引用类型传递的是地址。
(五)对象
1.创建对象的方法
2.字面量创建对象
3.构造函数创建对象
(六)工厂模式与构造函数创建对象
工厂模式:批量创建对象的一种方式;
缺陷:不能解决对象识别问题;
构造函数创建对象
没有显式的创建对象;
直接将属性和方法赋给了this对象;
没有return语句;
(七)日期对象
Date对象
var date = new Date();
var date = Date.now();
var date = +new Date();
日期格式化方法:
toString()
valueOf()
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
获取部分时间:
getTime() 返回毫秒数和valueOf()结果一样
getMilliseconds()
getSeconds() 返回0-59
getMinutes() 返回0-59
getHours() 返回0-23
getDay() 返回星期几 0周日 6周6
getDate() 返回当前月的第几天
getMonth() 返回月份,从0开始0-11
getFullYear() 返回4位的年份 如 2016