关于回调和递归思想的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于回调和递归思想的理解相关的知识,希望对你有一定的参考价值。
1) 面向过程的递归思想在面向对象的编程世界中的递归调用就是回调思想。它们两个的区别就是多了一个封装了方法和属性的对象。回调函数实参传递的是一个函数的指针,其实递归调用也是用函数的相同地址进行递归循环处理数据的。递归函数的原理就是函数的参数值不断地变化,从而不断的重新回到函数的起始地址处根据传递的参数值不断地处理数据。回调函数的原理就是把函数当做一个可以传递的实参赋值给自定义的回调函数的形参,实际传递的是定义函数的地址。
a) 理解回调函数最好把函数和类型对象相当,因为他们都是数据变量的集合,都是赋值语句键值对(key-value)的集合。对象的属性具有初始值,函数的作用就是通过赋值语句对对象的属性进行赋值,从而达到处理数据的效果。
b) 递归和回调的可读性不好,其实循环就是封装了递归操作,增加了代码的可读性。
c) 一般能用循环操作数据集合的操作就不要用递归。
d) 对于底层的代码设计思想还是需要理解,但是编程中是否使用需要自己衡量是否使代码的质量和编程效率得到提高。
2) 我们可以理解方法函数就是类的子集,因为类就是由属性和访问属性的方法(访问器子程序)组成。
a) 我们一般称被封装好的类库的处理数据的方法为函数。
b) 自己定义的为方法。
c) 方法就是变量的集合,这里的变量可以看做为方法的属性,因此方法和类同一性质的编程单位。它们的区别就是作用域的大小的问题。
d) 方法中的形参和实参的区别就是key和value的区别,像类的属性和属性值也同理,它们都是键值对模型(key-value)。
3) Js中的闭包和Java中的静态变量和全局变量是有异曲同工之妙,都是增长了局部变量的生命周期。
a) Java中的局部静态变量的作用域是限制在局部的方法块中,但是方法块调用结束之后局部静态变量不会释放内存。静态变量的生命周期和类的生命周期是一样的,当虚拟机的类加载器(ClassLoader)加载类的时候就会给类的静态变量分配内存。
b) Java 中的局部静态变量的生命周期属于类的生命周期,但是它的作用域是在方法的代码块之内的。
c) javascript中的闭包的作用就是增长了局部变量的生命周期,同时也扩大了方法内部局部变量的作用域。Js的闭包和Java中全局变量类似。
注: Js是动态弱语言,所以它的语法很松散,变量的类型可随意涂抹擦除。程序员的编码水平就会决定Js代码的泛滥程度。
a) JavaScript的特点就是把像Java中的属性(attr)和方法(fn)统称为对象,在JavaScript中一切皆对象。
b) Js是基于函数式的编程,它的数据表示方式是JSON,除此之外都是以function的形式组织数据。
c) 理解key-value的数据存储模型对学习Js有莫大的帮助。就如上所述,Js中变量的类型可以随便擦除,键key可以是方法也可以是对象属性。
4) 一个人想要独立地生存下去,只有不断地自我更新,民族亦然。
a) 更新和删除是有天壤之别的。
以上是关于关于回调和递归思想的理解的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript关于函数部分详解以及几种特殊的函数(回调函数递归函数)