加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

JS与函数式语言的三特性

发布时间:2023-10-21 15:30:21 所属栏目:教程 来源:
导读:首先要有一个概念:并不是一个语言支持函数,这个语言就可以叫做“函数式语言”。函数式语言中的函数(function),除了能被调用之外,还具有一些其他性质。有以下三点:

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;
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章