成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

關(guān)于JS函數(shù)部分的筆記

remcarpediem / 2614人閱讀

摘要:構(gòu)造器調(diào)用模式一個(gè)函數(shù),如果創(chuàng)建的目的就是希望結(jié)合前綴來(lái)調(diào)用,那就被稱(chēng)為構(gòu)造函數(shù)如果一個(gè)函數(shù)前面帶上來(lái)調(diào)用,那么就會(huì)創(chuàng)建一個(gè)連接到該函數(shù)的原型成員的新對(duì)象,同時(shí)函數(shù)中的會(huì)綁定到這個(gè)新對(duì)象中。

函數(shù) 函數(shù)對(duì)象

首先來(lái)理解一下什么事對(duì)象:ECMA-262是這樣定義的“無(wú)序?qū)傩缘募?,其屬性可以包含基本值、?duì)象或者函數(shù)”,也就是說(shuō),對(duì)象是‘名/值’對(duì)的集合。

var person=new Object();
person.name="Jake";
person.age=18;
person.sayName=function(){
    alert(this.name);
}

上面的例子創(chuàng)建了一個(gè)名為person的對(duì)象,并為它添加了兩個(gè)屬性:name、age和一個(gè)方法sayName。其中sayName用于顯示this.name(將被解析為person.name)的值。

函數(shù)字面量

我們來(lái)看一段代碼:

var add=function(a,b){
    return a+b;
}

函數(shù)字面量包含4個(gè)部分,分別是:

保留字 function

函數(shù)名 add

參數(shù) a、b

語(yǔ)句 return a+b;

函數(shù)字面量可以出現(xiàn)在任何允許出現(xiàn)的地方,也可以定義在其他函數(shù)中。一個(gè)內(nèi)部函數(shù)除了可以訪問(wèn)自己的參數(shù)和變量,同時(shí)它也能自由地訪問(wèn)它的父函數(shù)的變量和參數(shù)。通過(guò)函數(shù)字面量創(chuàng)建的函數(shù)對(duì)象包含一個(gè)連接到外部上下文的鏈接。這被稱(chēng)為閉包

閉包

閉包這個(gè)概念是js這門(mén)語(yǔ)言中一個(gè)非常重要而且是很難掌握的知識(shí)點(diǎn)!
這里只能淺顯地解釋一下什么是閉包
我們用一些代碼來(lái)解釋這個(gè)定義:

function foo(){
    var a=2;
    function bar(){
        console.log(a);
    }
    return bar;
}
var baz=foo();
baz();//2 <--這就是閉包的效果

函數(shù)bar()的詞法作用域能夠訪問(wèn)foo()內(nèi)部作用域,然后將bar()函數(shù)本身當(dāng)作一個(gè)值類(lèi)型進(jìn)行傳遞。
在foo執(zhí)行后,其返回值 bar()賦值給變量baz并調(diào)用baz(),實(shí)際上只是通過(guò)不同的標(biāo)識(shí)符引用調(diào)用了內(nèi)部的函數(shù)bar()。
在foo執(zhí)行后,foo內(nèi)部作用域不會(huì)被銷(xiāo)毀,因?yàn)橐恢倍际莃ar()本身在使用,所喲foo內(nèi)部作用域依然存在且能夠一直存活,以供bar隨時(shí)進(jìn)行引用。
bar依然對(duì)該作用域保持引用,而這個(gè)引用就叫作閉包。

函數(shù)作用域

作用域的作用:控制著變量與參數(shù)的可見(jiàn)性以及生命周期。
定義在函數(shù)內(nèi)部的參數(shù)和變量在函數(shù)外部是不可見(jiàn)的,而在一個(gè)函數(shù)內(nèi)部任何位置定義的變量,在函數(shù)內(nèi)部任何位置都可見(jiàn)。

var f00=function(){
    var a=3,b=5;
    var bar=function(){
        var b=7,c=11;     //此時(shí)a=3,b=7,c=11;
        a+=b+c;           //此時(shí)a=21,b=7,c=11;
    };
                          //此a=3,b=5,c沒(méi)有定義;
    bar();                //此時(shí)a=21,b=5;
}
調(diào)用

調(diào)用一個(gè)函數(shù)會(huì)暫停當(dāng)前函數(shù)的執(zhí)行,傳遞控制權(quán)和參數(shù)給新函數(shù)。js提供了四種調(diào)用模式:方法調(diào)用模式、函數(shù)調(diào)用模式、構(gòu)造器調(diào)用模式以及apply調(diào)用模式。

方法調(diào)用模式

當(dāng)一個(gè)函數(shù)被保存為對(duì)象的一個(gè)屬性是,我們稱(chēng)之為方法。當(dāng)一個(gè)方法被調(diào)用時(shí),this被綁定到該對(duì)象,當(dāng)對(duì)象與方法用“.”來(lái)連接時(shí),那么它就被當(dāng)作一個(gè)方法來(lái)調(diào)用了。

var person={
    name:"Jake",
    age:18,
    sayAge:function(age){
        this.age=age;
    }
};
person.sayAge(19);
docunment.writeln(person.age);//19

2.函數(shù)調(diào)用模式

當(dāng)一個(gè)函數(shù)并不是一個(gè)對(duì)象的屬性時(shí),那么它就是被當(dāng)作一個(gè)函數(shù)來(lái)調(diào)用的

var myobject={
}
//添加一個(gè)新的方法
myObject.do=function(value){
   this.value=value;
   var that=this;
   var helper=function(){
       that.value=that.value+that.value;
   };
   helper();
}
myObject.do(3);
console.log(myObject.value)//6

這里面遇到一個(gè)問(wèn)題,就是在helper函數(shù)內(nèi)部的this指向的時(shí)這個(gè)函數(shù)本省,而不是全局對(duì)象。我們找到一個(gè)很好的解決方法,那就是將this賦值給一個(gè)全新的變量that,那么內(nèi)部函數(shù)就可以訪問(wèn)到this,這樣就避免了內(nèi)部函數(shù)里面的this錯(cuò)誤的綁定。

3 構(gòu)造器調(diào)用模式

一個(gè)函數(shù),如果創(chuàng)建的目的就是希望結(jié)合new前綴來(lái)調(diào)用,那就被稱(chēng)為構(gòu)造函數(shù)
如果一個(gè)函數(shù)前面帶上new來(lái)調(diào)用,那么就會(huì)創(chuàng)建一個(gè)連接到該函數(shù)的prototype(原型)成員的新對(duì)象,同時(shí)函數(shù)中的this會(huì)綁定到這個(gè)新對(duì)象中。

var Myobject=function(string){
    this.status=string;
}
Myobject.prototype.get_status=function(){
    return this.status;
}
//創(chuàng)建實(shí)例
var newObj=new Myobject("Hello !");
console.log(newObj.get_status());
//Hello !

這里要特別注意:按照慣例,構(gòu)造函數(shù)始終都應(yīng)該以一個(gè)大寫(xiě)字母開(kāi)頭,而非構(gòu)造函數(shù)則應(yīng)該以一個(gè)小寫(xiě)字母開(kāi)頭。

4.Apply調(diào)用模式

Apply方法讓我們構(gòu)建一個(gè)參數(shù)組傳遞給調(diào)用函數(shù)。它允許我們選擇this的值。Apply方法接受兩個(gè)參數(shù),第一個(gè)要綁定給this的值,第二個(gè)就是參數(shù)數(shù)組。

var array=[3,4];
var sum=add.apply(null,array);//sum值為 7
var statusObj={
    status:"Hello"
};
var status=Quo.prototype.get_status.apply(statusObj);
//status值為‘Hello’
function SpeciallArray(){
    var values=new Array();
    values.push.apply(values,arguments);
    values.toPipedString=function(){
        return this.join("|");
    }
    return values;
}
var color=new SpeciallArray("blue","yellow","red");
console.log(colo.toPipedString);
//"blue|yellow|red"

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

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

相關(guān)文章

  • 《高性能JavaScript》讀書(shū)筆記

    摘要:除此以外,讓元素脫離文檔流也是一個(gè)很好的方法。因?yàn)樵匾坏┟撾x文檔流,它對(duì)其他元素的影響幾乎為零,性能的損耗就能夠有效局限于一個(gè)較小的范圍。講完重排與重繪,往元素上綁定事件也是引起性能問(wèn)題的元兇。高性能這本書(shū)非常精致,內(nèi)容也非常豐富。 showImg(https://segmentfault.com/img/bVJgbt?w=600&h=784); 入手《高性能JavaScript》一...

    W_BinaryTree 評(píng)論0 收藏0
  • js筆記系列之--時(shí)間及時(shí)間戳

    摘要:入門(mén)系列之時(shí)間及時(shí)間戳?xí)r間及時(shí)間戳?xí)r間及時(shí)間戳是里面很常見(jiàn)的一個(gè)概念,在我們寫(xiě)前端頁(yè)面的時(shí)候,經(jīng)常會(huì)遇到需要獲取當(dāng)前時(shí)間的情況,所以,了解中的時(shí)間概念非常重要。 js入門(mén)系列之 時(shí)間及時(shí)間戳 時(shí)間及時(shí)間戳 時(shí)間及時(shí)間戳是js里面很常見(jiàn)的一個(gè)概念,在我們寫(xiě)前端頁(yè)面的時(shí)候,經(jīng)常會(huì)遇到需要獲取當(dāng)前時(shí)間的情況,所以,了解js中的時(shí)間概念非常重要。而時(shí)間戳是指格林威治時(shí)間1970年01月0...

    wapeyang 評(píng)論0 收藏0
  • js筆記系列之--時(shí)間及時(shí)間戳

    摘要:入門(mén)系列之時(shí)間及時(shí)間戳?xí)r間及時(shí)間戳?xí)r間及時(shí)間戳是里面很常見(jiàn)的一個(gè)概念,在我們寫(xiě)前端頁(yè)面的時(shí)候,經(jīng)常會(huì)遇到需要獲取當(dāng)前時(shí)間的情況,所以,了解中的時(shí)間概念非常重要。 js入門(mén)系列之 時(shí)間及時(shí)間戳 時(shí)間及時(shí)間戳 時(shí)間及時(shí)間戳是js里面很常見(jiàn)的一個(gè)概念,在我們寫(xiě)前端頁(yè)面的時(shí)候,經(jīng)常會(huì)遇到需要獲取當(dāng)前時(shí)間的情況,所以,了解js中的時(shí)間概念非常重要。而時(shí)間戳是指格林威治時(shí)間1970年01月0...

    paulli3 評(píng)論0 收藏0
  • three.js筆記——(1)入門(mén)

    摘要:入門(mén)這部分內(nèi)容的目標(biāo)是簡(jiǎn)單地介紹,我們首先講如何用來(lái)實(shí)現(xiàn)一個(gè)旋轉(zhuǎn)的立方體。具體的實(shí)例將會(huì)給出,以防你卡住或者需要幫助。透視投影照相機(jī)的構(gòu)造函數(shù)是,其中是可視角度為,通常是容器的寬高比是近斷距離,是遠(yuǎn)端距離。 入門(mén) 這部分內(nèi)容的目標(biāo)是簡(jiǎn)單地介紹three.js,我們首先講如何用three.js來(lái)實(shí)現(xiàn)一個(gè)旋轉(zhuǎn)的立方體。具體的實(shí)例將會(huì)給出,以防你卡住或者需要幫助。 在html文件中引入thr...

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

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

0條評(píng)論

閱讀需要支付1元查看
<