匿名函数
典型函数声明:
function functionName(arg1, arg2, arg3) { //函数体... }
函数表达式的形式定义函数:
var functionName = function (arg1, arg2, arg3) { //函数体... };
区别:
1. 函数声明给函数指定了名称,而函数表达式形式是创建了一个匿名函数,并赋值给一个变量。
2. 函数声明会在代码被执行前加载到作用域中,而函数表达式则在代码执行到时才会有定义。
递归
定义:递归函数是在函数通过名字调用自身情况下构成。
function functionName(num) { if (num < 1) { return 1; } else { return num * arguments.cellee(num - 1); } } alert(functionName(4)); // 24
闭包
定义:有权访问另一个函数作用域中变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。
详细见:深入理解javascript闭包
模仿块级作用域
通常一称为私有作用域
(function(){ alert(1); //这里是块级作用域 })();
以上代码立即调用了一个匿名函数。
将函数调用包含在圆括号中,表示实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数。
function createFunction(count) { (function (){ for (var i =1; i < count; i++) { alert(i); } })(); alert(i); //错误! }
这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。
过多的变量和函数,会导致命名冲突。
通过创建私有作用域,开发人员既可以使用自己的变量,又不会担心搞乱全局作用域。
私有变量
function MyObject() { var name = 'Lishuming'; this.getName = function () { return name; }; this.setName = function (value) { name = value; }; } var myobj = new MyObject(); alert(myobj.getName()); myobj.setName('Gerl'); alert(myobj.getName());