JS与函数式语言的三特性
发布时间:2023-10-21 15:30:21 所属栏目:教程 来源:
导读:首先要有一个概念:并不是一个语言支持函数,这个语言就可以叫做“函数式语言”。函数式语言中的函数(function),除了能被调用之外,还具有一些其他性质。有以下三点:
1. 函数是运算元
2. 在函数
1. 函数是运算元
2. 在函数
首先要有一个概念:并不是一个语言支持函数,这个语言就可以叫做“函数式语言”。函数式语言中的函数(function),除了能被调用之外,还具有一些其他性质。有以下三点: 1. 函数是运算元 2. 在函数内保存数据 3. 函数内的运算对函数外无副作用 一、函数是运算元 普通的函数调用时,可以抽象的理解为:函数就是一个运算符,传入的参数是运算元; 但当JavaScript中的函数作为另一个函数的参数使用时,是传递引用的,这个“传入参数”就可以被理解为是一个运算元。由此的结论是,(作为“传入参数”的)函数具有运算元的含义,“函数参数”与普通参数并没有什么不同。 二、在函数内保存数据 在命令式语言中,函数内部的私有变量(局部变量)是不能被保存的。从程序的执行方式上来讲,局部变量在栈上分配,在函数执行结束后,所占用的栈被释放。因此函数内的数据不可能被保存。 在JavaScript的函数中,函数内的私有变量可以被修改,而且当再次“进入”到该函数内部时,这个被修改的状态仍将持续。下面的例子说明了这个特性: 代码如下: var set,get; function MyFunc(){ var value = 100; function set_value(v){ value = v; } function get_value(){ return value; } set = set_value; get = get_value; } MyFunc(); console.log(get()); //100 set(300); console.log(get()); //300 显而易见的一个好处是,如果一个数据能够在函数内持续保存,那么该函数(作为构造器)赋给实例时就可以使用这些数据进行运算;而在多个实例之间,由于数据存在于不同的闭包中,由此相互不会产生影响。 以面向对象的术语来解释,就是说不同的实例有各自的私有数据(复制自某个公共的数据)。下面的例子说明了这个特性: 代码如下: function MyObject(){ var value = 100; this.setValue = function(){ value = v; } this.showValue = function(){ console.log(value); } } var obj1 = new MyObject(); var obj2 = new MyObject(); obj2.setValue(300); obj1.showValue(); //100; (编辑:聊城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐