javaScript 递归 闭包 私有变量
2024-09-06 22:09:59
递归
递归的概念
在程序中函数直接或者间接调用自己。
跳出结构,有了跳出才有结果。
递归的思想
递归的调用,最终还是要转换为自己这个函数。
应用
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;
};
})();
最新文章
- RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化
- Spring配置JNDI和通过JNDI获取DataSource
- 访问其他程序的SheardPreferents
- 防止SVN冲突,Elipse资源同步介绍
- 将redis作为windows系统的系统服务
- ecshop 加广告出现广告位的宽度值必须在1到1024之间
- oracle创建索引后sqlldr导入错误
- ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
- 【Android 界面效果33】二级listview列表
- 开启URL伪静态的方法
- Python开篇
- JVM类加载机制以及类缓存问题的处理
- SQL中哪些情况会引起全表扫描
- Linux命令学习总结:ls
- sed:-e 表达式 #1,字符 10:未终止的“s”命令
- Fatal error: Uncaught Error: Call to undefined function mysqli_connect()
- 【Spark-core学习之七】 Spark广播变量、累加器
- HNOI2014做题笔记
- git报ssh variant &#39;simple&#39; does not support setting port解决办法
- <;<;attention is all you need>;>;速读笔记