3.1 什么是函数
function sum(a,b) {
var c = a + b;
return c;
}
函数的组成:
-
关键字
function
; -
函数名称,如:
sum
; -
参数,如:
a,b
; -
函数体,大括号之间的代码;
-
return
子句。函数通常有返回值,如果没有显示的返回值,会默认返回undefined
; -
参数:函数内部有个
arguments
变量,他能返回函数接收的所有参数。 -
预定义函数:
-
parseInt();
- 将任何值转成数字,失败返回
NaN
。 - 传入字符串,会在遇到首个非数字的字符时停止
- '123abc' > 123;
- '1g34' > 1;
- 'eg43' >
NaN
;
-
parseInt('FF',16)
,第二参数可选,代表基数(如十进制,十六进制)
- 将任何值转成数字,失败返回
-
parseFloat();
- 可以接收指数形式
parseFloat('1e2')
,结果为100.
- 可以接收指数形式
-
isNaN();
一般用来判断是否可以参与算数运算 -
isFinite();
一般用来检测即非Infinity
也非NaN
的数字
-
3.3 变量的作用域
- 变量以函数作为作用域
- 如果我们声明一个变量时没有使用
Var
语句,该变量会默认为全局变量。
变量提升
- 函数内所有被声明的变量,声明部分会被提升到函数最开始的地方,赋值部分不变,如:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a); // 1
}
f();
- 上面函数调用的结果为,第一个
alert()
显示的是underfined
,第二次显示的是1。- 如果函数内局部变量与全局变量同名,会覆盖全局变量
- 局部变量声明的部分会提升
- 上面的例子可以等价为:
var a = 123;
function f() {
var a; // same as : var a = underfined;
alert(a); // underfined
a = 1;
alert(a); // 1
}
函数也是数据
var f = function() {
return 1;
}
匿名函数
var f = function(a) {
return a;
}
- 作为参数传递给其他函数;
- 执行某些一次性任务;
回调函数
function add(a,b) {
return a() + b();
}
add(
function() {return 1;},
function() {return 2;},
)
// 结果为3
- 在不做命名的情况下传递函数;
- 将一个函数调用操作委托给另一个函数;
- 有助于提升性能;
即时函数
- 在函数调用后加
()
,表示即时调用
闭包
- 突破作用域链
3.7 练习题
1. 编写一个将十六进制值转换为颜色的函数,如:
> var a = gerRGB('#00FF00');
> a;
"rgb(0,255,0)"
代码如下
function getRGB(s) {
var i=0,res="rgb(";
for (i=0;i<3;i++) {
var d = (i>1) ? ")" : ",";
res += parseInt(s[i*2+1] + s[i*2+2],16) + d;
}
return res;
}
网友评论