js入门之函数
一、 函数
函数可以封装一段特定功能的代码,然后通过函数名可以重复调用
1 .函数的定义
funcation 函数名 (){
函数体
}
函数名() 调用函数
2. 函数的参数
funcation fun (形参1,形参2...) {
函数声明
}
fun(实参1, 实参2...)
在函数内部修改形参的值,不会影响外部的实参的值
素数 (只能被1和自身整除的数)
3. 函数返回值 return
当函数中不写return的时候 返回的值是undefined
写了return后面没跟具体值也是返回undefined
4. arguments
通过arguments可以获取函数调用的时候的实参, (实参个数不确定的时候)
function getMax() { var max = arguments[0]; for (var i = 0; i<arguments.length; i++) { if (max < arguments[i]) { max = arguments[i]; } } return max; } var retult = getMax(23,53,22,35,222,33,553); console.log(retult);
求斐波那契数列中的第n个数是多少?
function getFib(n) { var n1 =1; var n2 =1; var n3; for (var i = 3; i<=n; i++) { n3 = n1 + n2; n1 = n2; n2 = n3; } return n3; } var num = getFib(6); console.log(num);
二、匿名函数
1. 匿名函数声明
1. 函数声明 -命令函数 function fn() { } 2. 函数表达式 - 匿名函数 var fn = function () { }
2. 用法
1. 将匿名函数赋值给一个变量, 这样就可以通过变量进行调用 2. 匿名函数自调用 自调用函数: 当函数书写完成之后立即调用 (function () { console.log('我是自调用函数') })() 3. 函数也是一种数据类型 var fn = function() { console.log('我是传过来的函数') } function test(fun) { fun(); } test(fn);
3.1 因为函数是一种数据类型所以可以作为另一个函数的参数 3.2 因为函数是一种数据类型, 所以函数可作为另一个函数的返回值 function test(a) { var b =5; return function () { console.log(a + b); } } var fn = test(2); fn();
代码规范:
1. 命名规则 变量、函数的命名必须有意义 变量的名称一般用名词 函数的名称一般用动词 2. 变量规范 操作符的前后要有空格 3. 注释规范 // 这里是注释 4. 空格规范 if 和for 小括号前后都要有空格, 分号后面也要有一个空格 5. 换行规范 花括号起始的要跟定义的在一行
三、 作用域
变量或者函数可以起作用的访问 全局作用域: 在script 标签中 或者一个独立的js文件中,在任何位置都可以访问 局部作用域: 任何一个函数的内部都有一个局部作用域,在局部作用域中定义的变量叫局部变量,只能在该定义的函数中才能访问 块级作用域: 在ECAMScript中没有块级作用域 代码块{ 代码块可以单独存在 } 局部变量: 当这个函数执行完之后 内存会被回收 全局变量: 只有当关闭浏览器的时候 才会被回收 作用域链: // 全局作用域-- 0级作用域链 var num = 5; function f1() { // f1 局部作用域 -- 1级作用域 var num = 15; function f2() { // f2 局部作用域 -- 2级作用域链 console.log(num); } f2() } f1()
四、预解析
1. 变量提升,把变量声明提升到当前作用域的最上面,不包括变量的赋值 2. 函数提升,把函数声明提升到当前作用域最上面,不包括函数调用 在预解析的过程中如果函数的变量的名字相同,此时函数优先
We are down, but not beaten. tested but not defeated.