递归
递归的概念
在程序中函数直接或者间接调用自己。
跳出结构,有了跳出才有结果。
递归的思想
递归的调用,最终还是要转换为自己这个函数。
应用
function sum(n){ if(n ==1) return 1; return sum(n-1) + n } sum(100)
var fib = function (n){ if(n <=2){ return 1; } return fib(n-1) + fib(n-2); } console.log(fib(5))
数组扁平化
function flatten(arr) { return arr.reduce(function(prev,next){ return prev.concat(Array.isArray(next) ? flatten(next) : next) },[]) }
递归的两个必要因素:递归方程,递归结束条件。
闭包
闭包是指有权访问一个函数作用域中的变量的函数。
function fun(){ // 函数内部的变量,函数外部无法访问 var privateVal = "private value"; // 下面是闭包的精髓: // 在函数内部返回一个匿名函数,匿名函数能够访问fun 函数的的变量 return function(){ return privateVal; } } fun()(); // 第一个() 执行了fun 函数,返回值是一个匿名函数,第二执行了匿名函数。// 因此输出了"private value” // 以下代码,等同于fun()(); var temFun=fun(); console.log(temFun()); // 输出:"private value"
闭包只能取得包含函数中任何变量的最后一个值
function fun(){ var result = new Array(); for(var i=0;i<10;i++){ result[i] = function(){ return i; } } return result; } var result = fun(); console.log(result[0]()); // 为什么会输出10?
我们可以通过立即执行函数进行改造,把i 的值绑定在闭包函数内部
function fun(){ var result = new Array(); for(var i=0;i<10;i++){ result[i]=function(num){ return function(){ return num } }(i) } return result; } var result = fun(); console.log(result[0]()); // 输出0 console.log(result[0]()); // 输出1
私有变量
创建私有变量的方法
1.构造函数
function Person(name){ this.getName = function(){ return name; }; this.setName = function(value){ name = value; } } var tc = new Person(‘tc‘); var dj = new Person(‘dj‘); tc.getName(); // tc dj.getName(); // dj
2.静态私有变量
(function(){ var name = ‘‘; Person = function(value){ name= value; } Person.prototype.getName = function(){ return name; } Person.prototype.setName = function(value){ name = value; }; })();
原文地址:https://www.cnblogs.com/nmxs/p/11978735.html
时间: 2024-10-20 20:38:57