递归
function factorial(num){
if(num<=1){
return 1;
}else {
return num * arguments.callee(num-1);
}
}
console.log(factorial(4));
闭包
闭包是指有权接见另一个函数作用域中的变量的函数。
闭包与变量
作用域链的这类设置机制引出了一个值得注意的副作用,即闭包只能获得包括函数中任何变量的末了一个值。别忘了闭包所保留的是全部变量对象,而不是某个特别的变量。
function createFunctions(){
var result = new Array();
for (var i=0; i<10; i++){
result[i] = function(){
return i;
}
}
return result;
}
我们可以经由过程建立另一个匿名函数强迫让闭包的行动相符预期。
function createFunctions(){
var result = new Array();
for (var i=0; i<10; i++){
result[i] = function(num){
return function(){
return num;
};
}(i);
}
return result;
}
关于this对象
在全局函数中,this即是window,而当函数被作为某个对象的要领调用时,this即是谁人对象。不过,匿名函数的实行环境具有全局性,因而其this对象一般指向window。
var name = "The window";
var object = {
name: "My Object",
getNameFunc: function(){
return function(){
return this.name;
};
}
};
console.log(object.getNameFunc()()); // The window
不过,把外部作用域中的this对象保留在一个闭包可以接见到的变量里,就可以让闭包接见该对象了。
var name = "The window";
var object = {
name: "My Object",
getNameFunc: function(){
var that = this;
return function(){
return that.name;
};
}
};
console.log(object.getNameFunc()()); // My Object
模拟块级作用域
用块级作用域(一般称为私用作用域)的匿名函数的语法以下所示:
(function(){
})();