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

資訊專欄INFORMATION COLUMN

JavaScript紅寶書筆記(七)---Function類型

cyrils / 805人閱讀

摘要:函數(shù)實(shí)際上是對(duì)象。所以需要消除這種緊耦合。函數(shù)內(nèi)部屬性引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象或者也可以說是值函數(shù)的名字僅僅是一個(gè)包含指針的變量而已。因此,即使是在不同的環(huán)境中執(zhí)行,全局的函數(shù)與函數(shù)指向的仍然是同一個(gè)函數(shù)。

1.函數(shù)實(shí)際上是對(duì)象。每個(gè)函數(shù)都是 Function 類型的實(shí)例,而且都與其他引用類型一樣具有屬性和方法

2.由于函數(shù)名僅僅是指向函數(shù)的指針,因此函數(shù)名與包含對(duì)象指針的其他變量沒有什么不同

function sum(num1, num2){
    return num1 + num2;
}
alert(sum(10,10)); //20
var anotherSum = sum;
alert(anotherSum(10,10)); //20
sum = null;
alert(anotherSum(10,10)); //20

3.ECMAScript中函數(shù)沒有重載

4.函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別:解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用(可以訪問);至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真正被解釋執(zhí)行

alert(sum(10,10));
function sum(num1, num2){
    return num1 + num2;
}                              //函數(shù)聲明提升,正常執(zhí)行

alert(sum(10,10));
var sum = function(num1, num2){
    return num1 + num2;
};                            //報(bào)錯(cuò)

5.作為值得函數(shù):不僅可以像傳遞參數(shù)一樣把一個(gè)函數(shù)傳遞給另一個(gè)函數(shù),而且可以將一個(gè)函數(shù)作為另一個(gè)函數(shù)的結(jié)果返回;僅使用函數(shù)名可以訪問函數(shù)的指針而不執(zhí)行函數(shù)。

function add10(num){
    return num + 10;
}
var result1 = callSomeFunction(add10, 10);
alert(result1); //20

6.函數(shù)內(nèi)部屬性arguments

arguments它是一個(gè)類數(shù)組對(duì)象,包含著傳入函數(shù)中的所有參數(shù),它還包含一個(gè)屬性交callee,該屬性是一個(gè)指針,指向擁有這個(gè) arguments 對(duì)象的函數(shù)。callee屬性可以用來解耦合。

function factorial(num){
if (num <=1) {
    return 1;
} else {
    return num * factorial(num-1)        //利用factorial函數(shù)名回調(diào)遞歸
    }
}

這樣做法如果之后factorial賦值給別的變量,然后又重新賦值一個(gè)函數(shù)給factorial。那么別的變量并不會(huì)調(diào)用到原本的遞歸函數(shù),而是調(diào)用到factorial新賦值的函數(shù)。所以需要消除這種緊耦合。

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

var trueFactorial = factorial;

factorial = function(){
    return 0;
};

alert(trueFactorial(5)); //120
alert(factorial(5)); //0

7.函數(shù)內(nèi)部屬性this
this引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象——或者也可以說是 this 值

window.color = "red";
var o = { color: "blue" };
function sayColor(){
    alert(this.color);
}
sayColor(); //"red"
o.sayColor = sayColor;
o.sayColor(); //"blue"

ps:函數(shù)的名字僅僅是一個(gè)包含指針的變量而已。因此,即使是在不同的環(huán)境中執(zhí)行,全局的sayColor()函數(shù)與o.sayColor()函數(shù)指向的仍然是同一個(gè)函數(shù)。

8.函數(shù)都包含的屬性與length和protoType。
length是函數(shù)接收的命名參數(shù)個(gè)數(shù);
protoType是保存他們所有實(shí)例方法的真正所在,例如valueOf(),toString(),只不過是通過各自對(duì)象的實(shí)例訪問。另外,prototype 屬性是不可枚舉的,因此使用 for-in 無法發(fā)現(xiàn)。

9.每個(gè)函數(shù)都包含兩個(gè)非繼承而來的方法:apply()和 call()。這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù)
apply()方法接收兩個(gè)參數(shù):一個(gè)是在其中運(yùn)行函數(shù)的作用域,另一個(gè)是參數(shù)數(shù)組

function sum(num1, num2){
    return num1 + num2;
}
function callSum1(num1, num2){
    return sum.apply(this, arguments); // 傳入 arguments 對(duì)象
}
function callSum2(num1, num2){
    return sum.apply(this, [num1, num2]); // 傳入數(shù)組
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20

call()方法與 apply()方法的作用相同,它們的區(qū)別僅在于接收參數(shù)的方式不同。傳遞給函數(shù)的參數(shù)必須逐個(gè)列舉出來。

function sum(num1, num2){
    return num1 + num2;
}
function callSum(num1, num2){
    return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20

10.傳遞參數(shù)并非 apply()和 call()真正的用武之地;它們真正強(qiáng)大的地方是能夠擴(kuò)充函數(shù)賴以運(yùn)行的作用域

window.color = "red";
var o = { color: "blue" };
function sayColor(){
    alert(this.color);
}
sayColor(); //red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue

使用 call()(或 apply())來擴(kuò)充作用域的最大好處,就是對(duì)象不需要與方法有任何耦合關(guān)系。

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

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

相關(guān)文章

  • Effective JavaScript讀書筆記(一)

    摘要:如果為假值,不傳或者傳入,函數(shù)都會(huì)返回但是,傳入這個(gè)值是完全有可能的,所以這種判斷形勢(shì)是不正確的或者使用來判斷也可以原始類型優(yōu)于封裝類型對(duì)象擁有六個(gè)原始值基本類型布爾值,數(shù)字,字符串,,和對(duì)象。 作為一個(gè)前端新人,多讀書讀好書,夯實(shí)基礎(chǔ)是十分重要的,正如蓋樓房一樣,底層穩(wěn)固了,才能越壘越高。從開始學(xué)習(xí)到現(xiàn)在,基礎(chǔ)的讀了紅寶書《JavaScript高級(jí)程序設(shè)計(jì)》,犀牛書《JavaScri...

    zhoutao 評(píng)論0 收藏0
  • JavaScript寶書筆記(四)---變量、作用域和內(nèi)存問題

    摘要:在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。為此,引用類型的值是按引用訪問的。標(biāo)記清除是目前主流的垃圾收集算法,這種算法的思想是給當(dāng)前不使用的值加上標(biāo)記,然后再回收其內(nèi)存 1.在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。為此,引用類型的值是按引用訪問的。 2.當(dāng)從一個(gè)變量向另一個(gè)變量復(fù)制引用類型的值時(shí),兩個(gè)變量實(shí)際上將引用同一個(gè)對(duì)象,因此,改變其中一個(gè)變量,就會(huì)...

    imtianx 評(píng)論0 收藏0
  • JavaScript寶書筆記(一)---JS概述、變量及基本數(shù)據(jù)類型

    摘要:是一個(gè)數(shù)值可以被轉(zhuǎn)換成數(shù)值不能轉(zhuǎn)換成數(shù)值可以被轉(zhuǎn)換成數(shù)值十六進(jìn)制數(shù)八進(jìn)制數(shù)十進(jìn)制數(shù)十六進(jìn)制數(shù)可以避免,無法使用方法轉(zhuǎn)換成字符串的情況 1.JavaScript由三個(gè)部分組成:ECMAScript(提供核心語言功能)、DOM(文檔對(duì)象模型,提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口)、BOM(瀏覽器對(duì)象模型,提供與瀏覽器交互的方法和接口) 2.JavaScript概念:是一種專為與網(wǎng)頁交互而設(shè)計(jì)...

    sevi_stuo 評(píng)論0 收藏0
  • JavaScript寶書筆記(五)---引用類型

    摘要:在通過對(duì)象字面量定義對(duì)象時(shí),實(shí)際上不會(huì)調(diào)用構(gòu)造函數(shù)相當(dāng)于因?yàn)槭撬缮㈩愋蛿?shù)據(jù),所以類型也擁有著同樣的特性。數(shù)組的每一項(xiàng)可以保存任何類型的數(shù)據(jù),且數(shù)組的大小是可以動(dòng)態(tài)調(diào)整的。對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會(huì)返回的項(xiàng)組成的數(shù)組。 1.在通過對(duì)象字面量定義對(duì)象時(shí),實(shí)際上不會(huì)調(diào)用 Object 構(gòu)造函數(shù) var person = { name : Nicholas, a...

    G9YH 評(píng)論0 收藏0
  • JavaScript寶書筆記(六)---RegExp類型

    摘要:第二個(gè)循環(huán)使用構(gòu)造函數(shù)在每次循環(huán)中創(chuàng)建正則表達(dá)式。布爾值,表示是否設(shè)置了標(biāo)志。整數(shù),表示開始搜索下一個(gè)匹配項(xiàng)的字符位置,從算起。正則表達(dá)式的字符串表示,按照字面量形式而非傳入構(gòu)造函數(shù)中的字符串模式返回。 1.var someDate = new Date(Date.parse(May 25, 2004));可用來計(jì)算時(shí)間差 //取得開始時(shí)間 var start = Date.now()...

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

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

0條評(píng)論

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