1:函数的概念和作用
定义:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
作用:可以使一段代码块重复的使用。
2:函数的编写
function funcName(){}
例:function hello(){
document.write(‘hello’);
}
3:函数调用
调用方式:
1:手动调用。即:函数名称()。
hello();
2:事件驱动。
<div id=”box ” style=”width:100px;height:100px;background:#000;”></div>
var oBox = document.getElementById(‘box’);
oBox.onclick = function () {
hello();
};
4:事件的概念种类及作用
1:什么是事件?
通过鼠标或者键盘在浏览器窗口或者网页元素(按钮、文本框)上执行的操作,我们称之为事件(Event)。
2:什么是事件驱动?
由事件引发的一连串程序的动作,称为事件驱动(Event-Driver)。
举个例子:人被挨打后做出的反应。
事件类型:鼠标事件,键盘事件,网络事件等。
常用事件:onclick(单击),ondblclick(双击),onmouseover(鼠标进入),onmouseout(鼠标移开),onkeydown(键盘按下),onkeyup(键盘抬起)。
5:事件和循环结合打印九九乘法表。
例: <div id=”box ” style=”width:100px;height:100px;background:#000;”></div>
var oBox = document.getElementById('box');
oBox.onclick = function(){
for(var i = 1; i <= 9;i++){
for(var j = 1; j <= i; j++){
document.write(j + '*' + i + '=' + j * i + ' ');
}
document.write('<br/>');
}
};
6:参数的声明
定义:在调用函数的时候,我们可以向其传递值,这些值被称为参数。多个参数用逗号(,)分割。
function sum(a ,b){
alert(a + b);
}
sum(4,7);
7:函数创建方式
1:函数声明
function funcName (){};
例:funtion sum(a,b){
console.log(a + b);
};
sum(4 , 5);
2:函数表达式(函数字面量)
var funcName = function(){};
var sum = function(a,b){
console.log(a + b);
}
sum(4,5);
3:函数构造法(构造函数:出现在new运算符后的函数,称为构造函数)
var funcName = new Function();
var sum = new Function(‘a’, ‘b’, ‘console.log(a + b);s’);
sum(4,5);
注:函数表达式也可以指定函数名称,而函数声明是不可以省略函数名称。直接用函数表达式指定的函数名称调用函数会报错。
8:声明式和表达式的区别
1:JS解析器如何区分是函数声明还是函数表达式?如果一条语句是以function关键字开始,那么这段会被判定为函数声明。而函数声明是不能被立即执行的,这无疑会导致语法的错误(SyntaxError),因此就必须有一个办法,使解析器可以将之识别为函数表达式。
既然解析器识别函数定义的条件是以function关键字开始,那么只需要在function关键字前面有任何其他的运算符,就会从函数的定义转变为函数表达式。
2:函数声明式的方式必须指定函数名,函数表达式的方式可以没有名字。
3:如何将函数声明式转换成函数表达式?
~function(){}();
+function(){}();
-function(){}();
void function(){}();
(function(){})();
前几个转换方式看起来比较丑,通常都用最后一种来转换。
括号的作用:1确立运算优先级,2分组运算符。
9:形参和实参
形参:函数定义时声明的参数,我们称为形参(形式参数)。
实参:函数调用时传入的参数,我们称为实参(实际参数)。
10:arguments
定义:用来存放函数调用时传入的实参的对象(数组)。
结论:函数调用时传入的参数数量和函数定义时声明的参数数量没有关系,唯一有关系的就是参数顺序。
例:function sum(a,b){
console.log(arguments);
console.log(a + b);
}
sum(4,9);
11:return关键字
定义:用来规定从函数返回的值。
注意事项:
1:使用return语句以后,函数会停止执行,并返回给定的值。但是整个JS代码并不会停止执行。
2:如果函数没有显式的定义return语句,那么当函数代码段执行完毕后,默认会返回undefined。
3:return后面的代码不会运行
4:return不会将值返回到页面,只会从函数内部返回到函数外面;
5:return一次只能返回一个值
例:function sum(a,b){
var c = a + b;
return c;
}
var d = sum(4,7);
document.write(d);
12:JS解析顺序
1:读取第一个代码块。
2:做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到第五步。
3:对var变量和function定义做预编译处理。
4:执行代码段、有错则报错。
5:如果还有下一个代码段,则读入下一个代码段,重复第二步。
6:解析结束。
13:作用域
定义:变量起作用的范围。
在函数外部定义的变量称为全局变量,那么所有的脚本和函数都能访问到它。
var a = 5;
var b = 7;
在函数内部定义的变量称为局部变量(本地变量),所以只能在函数内部才能访问的到。
function sum(){
var c = a + b;
console.log(c);
};
sum();
注:
1:如果把值赋给尚未声明的变量,该变量将自动作为全局变量声明。
2:变量作用域在函数定义的时候就已经确定下来了。
14:生存周期
JavaScript 变量的生命期从它们被声明的时间开始。
局部变量会在函数运行完毕后被删除。
全局变量会在页面关闭后被删除。
15:with语句(扩展)
定义:为一个或者一组语句指定默认对象。
注意:在严格模式下,with语句不能使用。
提示:with语句是运行缓慢的代码块,尽量避免使用。
例:with(document){
write('hello world');
};
16:回调函数
回调函数就是一个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
function sum(a,b,fn){
var c = a + b;
if(fn){
fn();
}
console.log(c);
}
sum(3,8,function(){
alert(1);
});
17:递归函数
定义:允许内部程序调用自己本身的函数。
特点:
1:在函数里面调用自身。
2:必须有一个明确的递归结束条件,这个称之为递归出口。
3:不确定循环执行的次数。
注:快速排序中就使用到了递归函数。
18:匿名函数及调用方式
定义:顾名思义,就是没有名字的函数。
自运行:自动运行。
调用方式:(function () {})();
19:构造函数
主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用。构造函数名称首字母一般都大写。
function sum(){
alert(1);
}
new sum();
20:对象
定义:对象就是属性的无序集合,每个属性存放一个原始值、对象或者函数。
对象的属性和行为:
属性:用数据值来描述他的状态。
行为:用来改变对象行为的方法。
21:创建对象
1:构造函数方式:
function fun1 () {}
var obj=new fun1();
alert(typeof obj);
2:Object方式:
var obj=new Object();
console.log(obj);
3:隐式声明的方式:
var obj={};
alert(typeof obj);
22:添加对象属性和方法
如果属性值是函数,我们称它为对象的方法,否则叫做属性。
1:声明的时候添加:
var obj={属性名:属性值,属性名2:属性值2,......};
2:声明以后再添加
23:访问对象属性和方法
形式为:
引用值.属性
引用值.方法();