1.作用域:
概念:变量或者函数可以起到作用的范围区域。
函数外边的变量叫做全局变量,可以在函数外面和函数里面使用。
var num = 1;
function test(){
num++;
console.log(num);
}
test(); // 2
console.log(num); // 2
函数内部的变量叫做局部变量,只能在函数内部使用。
function test(){
var num1 = 10;
num1++;
console.log(num1);
}
test(); // 11
console.log(num1); // 报错,num1未定义
有一种情况比较特殊,函数内部声名的变量也是全局变量。
function test(){
num1 = 10;
num1++;
console.log(num1);
}
test(); // 11
console.log(num1); // 11
1.访问规则(输出、拿变量运算)
当前作用域 →上级作用域(父作用域)→全局作用域
如果直到全局作用域都没有找到变量的定义,则报错
2.赋值规则
当前作用域 →上级作用域(父作用域)→全局作用域
如果有一个值,但是没有定义;而且直到全局作用域都没有找到变量的定义,则把值定义为全局变量
总结:
- 函数外边使用的变量是全局变量,要在全局内找,可以是函数外部声名的变量也可以是函数内部的隐式声名的变量。
- 函数内部使用的变量是局部变量,先从局部找,如果局部没有,再从全局中找。
2.递归函数:
概念:递归函数就是在函数中调用自己。
// 求10的阶和,即:10+9+8+...+1
function facSum(num){
if(num == 1){
return 1;
}
return num + facSum(num-1);
}
var res = facSum(10);
console.log(res); // 55
3.事件:
概念:
事件就是用户在网页上的动作,例如:鼠标点击、鼠标移动、键盘按下… 事件三要素 : 事件源 + 事件名称 + 事件处理函数
事件源 : 谁触发这个事件 (按钮 btn)
事件名称 : 触发了什么事件 (点击click事件)
事件处理函数 : 事件触发后要执行的代码
注意:事件处理程序(函数)并不是立马执行,而是当事件触发的时候在会执行(浏览器会自动调用)
事件类型:
1.鼠标事件
事件 | 备注 |
---|---|
click | 单击 |
dblclick | 双击 |
contextmenu | 右击 |
mouseover | 移入(有冒泡) |
mouseout | 移出(有冒泡) |
mouseenter | 移入(没有冒泡) |
mouseleave | 移出(没有冒泡) |
mousedown | 按下 |
mouseup | 弹起 |
mousemove | 鼠标移动 |
mousewheel | 滑轮 |
2.键盘事件
事件 | 备注 |
---|---|
keypress | 敲击键盘 |
keydown | 键盘按下 |
keyup | 键盘抬起 |
键盘事件可以区分按下的是哪个键,每个键都有按键码
window.onkeydown = function(e){
var keyNum = e.keyCode //e.keyCode获取键盘码
if(keyNum == "13"){
alert("回车键");
}else if(keyNum == "8"){
alert("BackSpace键");
}
}
e.keyCode有兼容问题:IE中使用e.which
兼容写法:
var keycode = e.keyCode || e.which
3.表单事件
事件 | 备注 |
---|---|
focus | 获取焦点 |
blur | 失去焦点 |
change | 内容改变 |
submit | 提交事件 |
4.window事件
事件 | 备注 |
---|---|
load | 页面中所有内容(html结构、图片资源、样式文件、js文件)都加载完成,再执行这个事件的函数 |
resize | 浏览器窗口大小发生改变的时候触发的事件 |
scroll | 浏览器的滚动条发生滚动的时候触发的事件(必须有滚动条才行) |
unload | 浏览器关闭时触发的事件 |
4.对象:
1.概念:
将一系列的数据存入一个变量中,这个变量就是对象。
2.对象的创建:
(1)//直接创建 - 创建了一个空对象
var obj = {};
(2)//通过new来创建
var obj = new Object();
- 这是以json对象的形式创建的对象。
- 对象中多个数据是以键值对的形式出现。
- 键和值之间用冒号,键值对之间使用逗号。
- 对象的键都是字符串,但是可以不加引号;如果不加引号,键里面就不能包含连字符(-);如果键里面有连字符,那就必须加引号。
- 对象的值可以是符合js数据类型的任意类型。
- 对象中的键值对是无序的。
//eg:
var obj = {
属性1:值1,
属性2:值2
}
属性名的定义方式和变量名的定义方式一样。值可以是任意类型
3.对象的访问:
(1)对象.属性名 (对象.键)
(2)对象["键"] //中括号中必须加引号
注意:对象中的键如果有连字符,那就不能使用 对象.键 这种方式来访问,必须使用 对象["键"]
4.对象的遍历:
for(var 变量 in 对象){
变量 - 指的是对象中的每一个键
}
5.对象的方法:
//对象中的值为函数的话,这个键叫做对象的方法
var obj2 = {
name:'王五',
study:function(){
console.log("在学习");
}
}
console.log(obj2);
//方法的访问和属性是一样的:
obj2.study(); // 因为函数执行需要调用,所以需要加小括号
6.对象的操作:
增 对象.键=值 //如果对象中没有这个属性,给它赋值就是增加
删 delete 对象.键
改 //如果对象中有这个属性,给它赋值就是修改
查 对象.键 对象[键]
5.构造函数:
var num = 90;
var num1 = new Number(90);
console.log(typeof num); // number
console.log(typeof num1); // object
//用new创建出来的数据都可以有属性和方法, 因为用new创建出来的变量都是对象。
//我们把能用new创建对象的这种函数,叫做构造函数。