JS基础:函数
函数声明和函数表达式
在 JS 中定义函数的方式有两种:一种是函数声明,一种是函数表达式。
例如:
//函数声明 function fun() { ... }
//函数表达式 var f = function() { ... }
它们的区别在于 JS 会把函数声明提升到作用域顶部,而函数表达式只有在执行到该语句时才会生效
关于函数的其他注意事项:
1、函数名后面跟圆括号 "()" 表示立即执行该函数,例如:
var test = fun(); //表示执行 "fun" 这个函数,并将返回值赋值给 "test" 变量
var test = fun; //表示将 "fun" 函数的指针赋值给 "test" 变量,"test" 是该函数的一个引用
2、函数的 “arguments” 对象是一个参数数组,可以使用 “arguments” + 下标的方式访问传入函数中的参数
使用匿名自执行函数模拟块级作用域
JS 中只有全局作用域和函数级作用域,并没有 C++ 那种花括号包裹起来的块级作用域,但是可以通过匿名自执行函数模拟块级作用域
例如:
(function() { ... })();
以上代码定义并立即调用了一个匿名函数,将这个匿名函数包含在一对圆括号中是因为 "()" 这个运算符只对函数表达式有效,而 "function" 是 JS 中的一个关键字,位于句首表示函数声明,是不能被执行的。
高阶函数
高阶函数是指至少满足下列条件之一的函数:
1、函数可以作为参数被传入
2、函数可以作为返回值输出
例如:
var isString = function(obj) { return typeof(obj) == 'string'; } var isNumber = function(obj) { return typeof(obj) == 'number';
这两个用于判断数据类型的函数中的大部分代码都是可以重复利用的,如果以后还要扩展的话总是需要重新定义一个函数,而使用高阶函数就可以避免这些问题
例如:
function isType(type) { return function(obj) { return typeof(obj) == type; } } var isString = isType('string'); var isNumber = isType('number');