国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

高程3總結(jié)#第7章函數(shù)表達(dá)式

sevi_stuo / 615人閱讀

摘要:匿名函數(shù)可以用來模仿塊級(jí)作用域來避免這個(gè)問題這里是塊級(jí)作用域代碼定義并立即調(diào)用了一個(gè)匿名函數(shù),將函數(shù)聲明包含在一對(duì)圓括號(hào)中,表示它實(shí)際上是一個(gè)函數(shù)表達(dá)式,而緊隨其后的另一對(duì)圓括號(hào)會(huì)立即調(diào)用這個(gè)函數(shù)。

函數(shù)表達(dá)式 遞歸

遞歸函數(shù)是在一個(gè)函數(shù)通過名字調(diào)用自身的情況下構(gòu)成的

function factrial(num){
  if(num<=1){
    return 1;
  }else {
    return num*factrial(num-1);
  }
}

argument.callee是一個(gè)指向正在執(zhí)行的函數(shù)的指針,因此可以用它來實(shí)現(xiàn)對(duì)函數(shù)的遞歸調(diào)用

function factorial(num){
  if(num<=1){
    return 1;
  }else {
    return num*argument.callee(num-1)
  }
}

嚴(yán)格模式下不能通過腳本訪問argument.callee,訪問這個(gè)屬性會(huì)導(dǎo)致錯(cuò)誤,不過可以使用命名函數(shù)表達(dá)式類達(dá)成相同的結(jié)果

var factorial=(function f(num){
  if(num<=1){
    return 1;
  }else {
    return num*f(num-1);
  }
})

閉包

閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù)

function compare(value1,value2){
  if(value1value2){
    return 1;
  }else {
    return 0;
  }
}
var result=compare(5,10)

//創(chuàng)建函數(shù)
var compareNames = createComparisonFunction("name");
//調(diào)用函數(shù)
var result = compareNames({ name: "Nicholas" }, { name: "Greg" });
//解除對(duì)匿名函數(shù)的引用(以便釋放內(nèi)存)
compareNames = null;

閉包與變量

閉包只能取得包含函數(shù)中任何變量的最后一個(gè)值,i值為10

function creatFunctions(){
  var result=new Array();
  for(var i=0;i<10;i++){
    result[i]=function(){
      return i;
    };
  };
  return result;
}

通過匿名函數(shù)強(qiáng)制讓閉包的行為符合預(yù)期

function createFuntion(){
  var result=new Array();
  for(var i=0;i<10;i++){
    result[i]=function(num){
      return function(){
        return num;
      };
    }(i);
  }
  return result;
}

關(guān)于this對(duì)象

匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其this對(duì)象通常指向window

把外部作用域中的this對(duì)象保存在一個(gè)閉包能夠訪問到的變量里,就可以了讓閉包訪問這個(gè)對(duì)象了

var name="The Window";
var object={
  name:"My Object",
  getNameFunc:function(){
    var that=this;
    return function(){
      return that.name
    };
  }
};
alert(object.getNameFunc()());//"My Object"

定義米明函數(shù)之前,我們把this對(duì)象賦值給了一個(gè)名叫that的變量,而在定義了這個(gè)閉包之后,閉包也可以訪問這個(gè)變量,因此它是我們?cè)诎瘮?shù)中特意聲明的一個(gè)變量,即使在函數(shù)返回之后,that也仍然引用這object

內(nèi)存泄漏

如果閉包作用域中保存著一個(gè)HTML元素,那么久意味著該元素將無法被銷毀

function assignHandler(){
  var element=docunemt.getElementById("someElement");
  element.onclick=function(){
    alert(element.id)
  }
}

以上代碼段中的element占用的內(nèi)存永遠(yuǎn)不會(huì)被回收

function assignHandler(){
  var element=document.getElementById("someElement");
  var id=element.id;
  element.onclick=function(){
    alert(id);
  }
  element=null;
}

模仿塊級(jí)作用域
function outputNumbers(count){
  for(var i=0;i

JavaScript從來不會(huì)告訴你是否多次聲明了同一個(gè)變量,遇到這種情況,只會(huì)對(duì)后續(xù)的聲明視而不見,不過會(huì)執(zhí)行后續(xù)聲明中的變量初始化。匿名函數(shù)可以用來模仿塊級(jí)作用域來避免這個(gè)問題

(function(){
  //這里是塊級(jí)作用域
})()

代碼定義并立即調(diào)用了一個(gè)匿名函數(shù),將函數(shù)聲明包含在一對(duì)圓括號(hào)中,表示它實(shí)際上是一個(gè)函數(shù)表達(dá)式,而緊隨其后的另一對(duì)圓括號(hào)會(huì)立即調(diào)用這個(gè)函數(shù)。

function outputNumbers(count){
  (function(){
    for(var i=0;i

這種技術(shù)經(jīng)常在全局作用域中被用在函數(shù)外部,從而限制向全局作用域中添加過多的變量和函數(shù)。一般來說,我們應(yīng)該盡量少向全局作用域中添加變量和函數(shù)

私有變量

JavaScript中滅有私有成員的概念,所以對(duì)象屬性都是共有的。任何在函數(shù)中定義的變量,都可以認(rèn)為是私有變量,因?yàn)椴荒茉诤瘮?shù)的外部訪問這些變量,私有變量包括函數(shù)的參數(shù)、局部變量和在函數(shù)內(nèi)部定義的其他函數(shù)。

如果在函數(shù)內(nèi)部創(chuàng)建一個(gè)閉包,那么閉包通過自己的作用域鏈也可以訪問函數(shù)內(nèi)的變量

靜態(tài)私有變量
(funciton(){
  //私有變量和私有函數(shù)
  var privateVariable=10;
  function privateFunction(){
    return false;
  }
  //構(gòu)造函數(shù)
  MyObject=function(){}
  //公有/特權(quán)方法
  MyObject.prototype.publicMethod=function(){
    privateVariable++;
    return privateFunciton();
  }
})();

在私有作用域中,首先定義了私有變量和私有函數(shù),然后又定義了構(gòu)造函數(shù)及其公有方法

模塊模式

模塊模式是為單例創(chuàng)建私有變量和特權(quán)方法。單例指的就是只有一個(gè)實(shí)例的對(duì)象。按照慣例,JavaScript是以字面量的方式來創(chuàng)建單例對(duì)象的

var singleton={
  name:value,
  method:function(){
    //這里是代碼方法
  }
}

模塊模式通過為單例添加私有變量和特權(quán)的方法能夠使其得到增強(qiáng)

var singleton=function(){
  //私有變量和私有函數(shù)
  var privateVariable=10;
  funciton privateFunction(){
    return false;
  }
  //特權(quán)/公有方法和屬性
  return {
    publicProperty:true,
    publicMethod:function(){
      privateVariable++;
      return privateFunction();
    }
  };
}();

增強(qiáng)的模塊模式
var application = function(){
//私有變量和函數(shù)
var components = new Array();
//初始化
components.push(new BaseComponent());
//創(chuàng)建 application 的一個(gè)局部副本
var app = new BaseComponent();
//公共接口
app.getComponentCount = function(){
  return components.length;
};
app.registerComponent = function(component){
  if (typeof component == "object"){
    components.push(component);
  }
};
//返回這個(gè)副本/
return app;
}();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97620.html

相關(guān)文章

  • 高程3總結(jié)#17錯(cuò)誤處理與調(diào)試

    錯(cuò)誤處理與調(diào)試 錯(cuò)誤處理 try-catch語句 try{ //可能會(huì)導(dǎo)致錯(cuò)誤的代碼 }catch(error){ //在錯(cuò)誤發(fā)生時(shí)怎么處理 } 發(fā)生錯(cuò)誤時(shí)可以顯示瀏覽器給出的信息 try{ window.someNonexistentFunction(); }catch(error){ alert(error.message); } 在try-catch語句中是可選的,但...

    fizz 評(píng)論0 收藏0
  • 高程3總結(jié)#18JavaScript與XML

    摘要:在基于使用命名空間的文檔求值時(shí),需要使用對(duì)象。第四個(gè)參數(shù)的取值類型是下列常量之一,返回與表達(dá)式匹配的數(shù)據(jù)類型。,返回字符串值。這是最常用的結(jié)果類型。集合中節(jié)點(diǎn)的次序與它們?cè)谖臋n中的次序一致。 JavaScript與XML 瀏覽器對(duì)XML DOM的支持 DOM2級(jí)核心 在通過JavaScript處理XML時(shí),通常只使用參數(shù)root,因?yàn)檫@個(gè)參數(shù)指定的是XML DOM文檔元素的標(biāo)簽名 v...

    gaosboy 評(píng)論0 收藏0
  • 高程3總結(jié)#8BOM

    摘要:對(duì)象的核心對(duì)象是,它表示瀏覽器的一個(gè)實(shí)例。而和則表示該容器中頁面視圖區(qū)的大小。在中,與返回相同的值,即視口大小而非瀏覽器窗口大小。第三個(gè)參數(shù)是一個(gè)逗號(hào)分隔的設(shè)置字符串,表示在新窗口中都顯示哪些特性。這應(yīng)該是用戶打開窗口后的第一個(gè)頁面 BOM window對(duì)象 BOM的核心對(duì)象是window,它表示瀏覽器的一個(gè)實(shí)例。在瀏覽器中,window對(duì)象有雙重角色,它既是通過JavaScript訪...

    MASAILA 評(píng)論0 收藏0
  • 高程3總結(jié)#9客戶端檢測

    摘要:能力檢測無法精確地檢測特定的瀏覽器和版本。用戶代理檢測通過檢測用戶代理字符串來識(shí)別瀏覽器。用戶代理檢測需要特殊的技巧,特別是要注意會(huì)隱瞞其用戶代理字符串的情況。 客戶端檢測 能力檢測 能力檢測的目的不是識(shí)別特定的瀏覽器,而是識(shí)別瀏覽器的能力,采用這種方式不必顧忌特定的瀏覽器,只要確定瀏覽器支持的特定的能力,就能給出解決方案,檢測基本模式 if(object.propertyInQu...

    BigNerdCoding 評(píng)論0 收藏0
  • 高程3總結(jié)#14表單腳本

    表單腳本 表單的基礎(chǔ)知識(shí) HTMLFormElement有自己獨(dú)特的屬性和方法 acceptCharset,服務(wù)器能夠處理的字符集,等價(jià)于HTML中的accept-charset特性 action,接受請(qǐng)求的URL,等價(jià)于HTML中的action特性 elements,表單中所有控件的集合 enctype,請(qǐng)求的編碼類型,等價(jià)于HTML中的enctype特性 length,表單中控件的數(shù)量 m...

    Tony 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<