亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS和函數(shù)式語(yǔ)言的三特性

 更新時(shí)間:2014年03月05日 14:51:08   作者:  
本文內(nèi)容是我閱讀《JavaScript語(yǔ)言精髓與編程實(shí)踐》時(shí),做的讀書(shū)筆記,周愛(ài)民老師的書(shū)寫(xiě)的太深刻了

首先要有一個(gè)概念:并不是一個(gè)語(yǔ)言支持函數(shù),這個(gè)語(yǔ)言就可以叫做“函數(shù)式語(yǔ)言”。函數(shù)式語(yǔ)言中的函數(shù)(function),除了能被調(diào)用之外,還具有一些其他性質(zhì)。有以下三點(diǎn):
1. 函數(shù)是運(yùn)算元
2. 在函數(shù)內(nèi)保存數(shù)據(jù)
3. 函數(shù)內(nèi)的運(yùn)算對(duì)函數(shù)外無(wú)副作用
一、函數(shù)是運(yùn)算元
普通的函數(shù)調(diào)用時(shí),可以抽象的理解為:函數(shù)就是一個(gè)運(yùn)算符,傳入的參數(shù)是運(yùn)算元;
但當(dāng)JavaScript中的函數(shù)作為另一個(gè)函數(shù)的參數(shù)使用時(shí),是傳遞引用的,這個(gè)“傳入?yún)?shù)”就可以被理解為是一個(gè)運(yùn)算元。由此的結(jié)論是,(作為“傳入?yún)?shù)”的)函數(shù)具有運(yùn)算元的含義,“函數(shù)參數(shù)”與普通參數(shù)并沒(méi)有什么不同。

二、在函數(shù)內(nèi)保存數(shù)據(jù)
在命令式語(yǔ)言中,函數(shù)內(nèi)部的私有變量(局部變量)是不能被保存的。從程序的執(zhí)行方式上來(lái)講,局部變量在棧上分配,在函數(shù)執(zhí)行結(jié)束后,所占用的棧被釋放。因此函數(shù)內(nèi)的數(shù)據(jù)不可能被保存。
在JavaScript的函數(shù)中,函數(shù)內(nèi)的私有變量可以被修改,而且當(dāng)再次“進(jìn)入”到該函數(shù)內(nèi)部時(shí),這個(gè)被修改的狀態(tài)仍將持續(xù)。下面的例子說(shuō)明了這個(gè)特性:

復(fù)制代碼 代碼如下:

  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


顯而易見(jiàn)的一個(gè)好處是,如果一個(gè)數(shù)據(jù)能夠在函數(shù)內(nèi)持續(xù)保存,那么該函數(shù)(作為構(gòu)造器)賦給實(shí)例時(shí)就可以使用這些數(shù)據(jù)進(jìn)行運(yùn)算;而在多個(gè)實(shí)例之間,由于數(shù)據(jù)存在于不同的閉包中,由此相互不會(huì)產(chǎn)生影響。
以面向?qū)ο蟮男g(shù)語(yǔ)來(lái)解釋,就是說(shuō)不同的實(shí)例有各自的私有數(shù)據(jù)(復(fù)制自某個(gè)公共的數(shù)據(jù))。下面的例子說(shuō)明了這個(gè)特性:
復(fù)制代碼 代碼如下:

  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;


三、函數(shù)內(nèi)的運(yùn)算對(duì)函數(shù)外無(wú)副作用
這一特性的含義在于:
* 函數(shù)使用入口參數(shù)進(jìn)行運(yùn)算,而不修改它(作為值參數(shù)而不是變量參數(shù)使用)
* 在運(yùn)算過(guò)程中不會(huì)修改函數(shù)外部的其他數(shù)據(jù)的值(例如全局變量)
* 運(yùn)算結(jié)束后通過(guò)“函數(shù)返回”向外部系統(tǒng)傳值

這樣的函數(shù)在運(yùn)算過(guò)程中對(duì)外部系統(tǒng)是無(wú)副作用的。然而我們注意到,JavaScript允許在函數(shù)內(nèi)部引用和修改全局變量,甚至可以聲明全局變量。這一點(diǎn)其實(shí)是破壞它的函數(shù)式特性的。
除此之外,JavaScript也允許在函數(shù)內(nèi)修改對(duì)象和數(shù)組成員————這些成員應(yīng)該由對(duì)象方法而非對(duì)象系統(tǒng)外的其他函數(shù)來(lái)修改。
所以:JavaScript這項(xiàng)特性只能通過(guò)開(kāi)發(fā)人員的編程習(xí)慣來(lái)保證。

相關(guān)文章

  • 老生常談javascript變量的命名規(guī)范和注釋

    老生常談javascript變量的命名規(guī)范和注釋

    下面小編就為大家?guī)?lái)一篇老生常談javascript變量的命名規(guī)范和注釋。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • javascript的幾種繼承方法介紹

    javascript的幾種繼承方法介紹

    下面小編就為大家?guī)?lái)一篇javascript的幾種繼承方法介紹。小編覺(jué)得挺不錯(cuò)的?,F(xiàn)在分享給大家,給大家一個(gè)參考
    2016-03-03
  • JavaScript使用過(guò)程中需要注意的地方和一些基本語(yǔ)法

    JavaScript使用過(guò)程中需要注意的地方和一些基本語(yǔ)法

    JavaScript使用過(guò)程中需要注意的地方和一些基本語(yǔ)法,需要的朋友可以參考下。
    2010-08-08
  • MVC+Layui彈出表單模態(tài)框的實(shí)現(xiàn)代碼

    MVC+Layui彈出表單模態(tài)框的實(shí)現(xiàn)代碼

    這篇文章主要介紹了MVC+Layui彈出表單模態(tài)框的實(shí)現(xiàn)代碼,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • javascript實(shí)現(xiàn)的網(wǎng)頁(yè)局布刷新效果

    javascript實(shí)現(xiàn)的網(wǎng)頁(yè)局布刷新效果

    AJAX,近幾年火熱起來(lái)的一個(gè)詞.什么是ajax本文就不介紹了,其實(shí),AJAX也就是 javascript腳本的應(yīng)用.全拼是:AsynchronousJavaScript+XML .現(xiàn)在我們就來(lái)看一個(gè)用javascript實(shí)現(xiàn)的局部刷新
    2008-12-12
  • 詳解JavaScript實(shí)現(xiàn)異步Ajax

    詳解JavaScript實(shí)現(xiàn)異步Ajax

    本文詳細(xì)講解了JavaScript實(shí)現(xiàn)異步Ajax的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 關(guān)于eval 與new Function 到底該選哪個(gè)?

    關(guān)于eval 與new Function 到底該選哪個(gè)?

    本篇文章小編將為大家介紹,關(guān)于eval 與new Function 到底該選哪個(gè)?有需要的朋友可以參考一下
    2013-04-04
  • 老生常談onBlur事件與onfocus事件(js)

    老生常談onBlur事件與onfocus事件(js)

    下面小編就為大家?guī)?lái)一篇老生常談onBlur事件與onfocus事件(js)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • JavaScript mapreduce工作原理簡(jiǎn)析

    JavaScript mapreduce工作原理簡(jiǎn)析

    MapReduce是一個(gè)編程模型,用于作業(yè)調(diào)度,也是一個(gè)處理和生成超大數(shù)據(jù)集的算法模型的相關(guān)實(shí)現(xiàn),本文將詳細(xì)介紹JavaScript mapreduce工作原理,需要的朋友可以參考下
    2012-11-11
  • javascript中var與let、const的區(qū)別詳解

    javascript中var與let、const的區(qū)別詳解

    這篇文章主要介紹了javascript中var與let、const的區(qū)別詳解,需要的朋友可以參考下
    2022-12-12

最新評(píng)論