1.函数的概念和创建
1.1 函数
函数是由事件驱动或者当其被调用时可重复执行的代码块。
增强了代码的灵活性,可扩展性,可维护性,减少代码的冗余。
1.2 函数的创建方式
函数的创建方式有三种
1.2.1 函数声明
function functionName() {
statement
}
1.2.2 函数表达式
var functionName = function () {
statement
|
1.2.3 构造函数
var functionName = new Function();
2. 函数的执行
2.1 事件驱动
2.2 调用函数 函数名 ()
<input type="button" name="btn" id="btn" value="测试" />
<script type="text/javascript">
function foo(){
document.write("hello world");
}
//btn.onclick = foo;//函数名也成为指针 事件驱动
//函数调用 函数名()
//foo();
</script>
3. 参数 (分为形参和实参)
定义函数时,在小括号里写的变量——形参
调用函数时,在小括号里写的变量或者值 ——实参
形参和实参的个数应保持一致,如果形参个数多于实参,多于的形参会取undefined;如果实参个数比形参多,多余的实参无用。
4. JavaScript预编译分析
脚本执行js分为两个阶段:预编译和代码的执行。
JS并不会完全按照代码顺序进行解析执行,而是在解析之前进行一次“预编译”。在此过程中,会把:
- (1)定义式的函数优先执行
- (2)所有var变量定义,默认值为undefined
编译阶段会对所有的var变量和function进行扫描,并将var变量初始化为undefined类型,而function则被初始化为函数值。到了执行阶段,JS从上面往下面依顺序执行,遇到var变量便进行赋值(因此,在赋值之前进行调用的话会出现错误).遇到函数变量的话会从活动对象中寻找函数。
变量声明 :var
函数声明 :function
注意:预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译只有在解释执行阶段才会进行变量初始化。
5. arguments 和return 关键字
arguments :用在函数内部,表示传给该函数的所有实参的集合。
function foo(){
var sum = 0;
console.log(arguments);//伪数组或者类数组对象
//arguments[0]取到第一个实参值,arguments[arguments.length-1]取到最后一个实参值
//console.log(arguments[0],arguments[1])
//var sum = arguments[0]+arguments[1]+arguments[2]+arguments[3];
for(var i = 0; i < arguments.length; i++){
sum += arguments[i]
}
document.write(sum);
}
foo(1,2,3,4,5,55);
/*function bar(){
//表示的函数自身 在代码压缩时
//console.log(arguments.callee);
}
bar();*/
return :(1)返回函数运行结果 (2) 终止函数执行
如果一个函数没有return或者return后面没有跟具体的值,默认返回undefined。
//这个函数的功能是在页面中打印aaa
//这个函数运行的结果为bbb
function foo(){
document.write("aaa");
return "bbb";
}