亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript 之 面向?qū)ο?[ Function類型 ]

AprilJ / 1697人閱讀

摘要:類型描述在中的所有函數(shù)都是類型的對(duì)象定義函數(shù)的方式函數(shù)聲明方式函數(shù)名函數(shù)體函數(shù)聲明方式定義函數(shù)函數(shù)聲明方式顯示函數(shù)聲明方式字面量方式函數(shù)名函數(shù)體字面量方式定義函數(shù)字面量方式顯示字面量方式構(gòu)造函數(shù)方式函數(shù)名參數(shù),函數(shù)體函數(shù)的參數(shù)和函數(shù)體,都以

Function類型 描述

在JavaScript中的所有函數(shù)都是Function類型的對(duì)象

定義函數(shù)的方式 函數(shù)聲明方式
function 函數(shù)名 () { 
    函數(shù)體 
}
/* 函數(shù)聲明方式定義函數(shù) */
function fun() {
    console.log( "函數(shù)聲明方式..." );
}
fun();// 顯示 函數(shù)聲明方式...
字面量方式
var 函數(shù)名 = function () { 
    函數(shù)體 
}
/* 字面量方式定義函數(shù) */
var fu = function () {
    console.log( "字面量方式..." );
}
fu();// 顯示 字面量方式...
構(gòu)造函數(shù)方式
var 函數(shù)名 = new Function( 參數(shù),函數(shù)體 )

函數(shù)的參數(shù)和函數(shù)體,都以字符串形式填寫在括號(hào)中,以逗號(hào)分隔

在使用構(gòu)造函數(shù)創(chuàng)建一個(gè)Function類型的對(duì)象時(shí),會(huì)得到一個(gè)函數(shù)

/* 構(gòu)造函數(shù)方式定義函數(shù) */
var fn = new Function( "can", "console.log( can )" );
fn("構(gòu)造函數(shù)方式...");// 顯示 構(gòu)造函數(shù)方式...
判斷定義的函數(shù)是否為Function類型
/* 函數(shù)聲明方式 */
console.log( fun instanceof Function );// true
/* 字面量方式 */
console.log( fu instanceof Function );// true
/* 構(gòu)造函數(shù)方式 */
console.log( fn instanceof Function );// true
apply()方法

表示用于調(diào)用指定函數(shù)

該方法接收兩個(gè)參數(shù)

第一個(gè) - this

第二個(gè) - 一個(gè)數(shù)組

該數(shù)組用于存儲(chǔ)指定函數(shù)的所有參數(shù)(實(shí)參)

/* 定義一個(gè)函數(shù) */
function fun( can ) {
    console.log( can );
}
/* 根據(jù)函數(shù)語法正常調(diào)用函數(shù) */
fun( "這是一個(gè)函數(shù)" );// 顯示 這是一個(gè)函數(shù)

/*
    根據(jù)Function對(duì)象提供的apply()方法進(jìn)行函數(shù)調(diào)用
     * 參數(shù) this 可以先用 null 站位
 */
fun.apply( null, ["這還是一個(gè)函數(shù)"] );// 顯示 這還是一個(gè)函數(shù)
call()方法

表示用于調(diào)用指定函數(shù)

該方法接收兩個(gè)參數(shù)

第一個(gè) - this

第二個(gè) - 函數(shù)的參數(shù)
-需求多少參數(shù),寫多少參數(shù),使用逗號(hào)分隔

/* 定義一個(gè)函數(shù) */
function fun( can, shu ) {
    console.log( can + shu );
}
/* 根據(jù)函數(shù)語法正常調(diào)用函數(shù) */
fun( "這是一個(gè)函數(shù)", "..." );// 顯示 這是一個(gè)函數(shù)...

/*
    根據(jù)Function對(duì)象提供的call()方法進(jìn)行函數(shù)調(diào)用
     * 參數(shù) this 可以先用 null 站位
 */
fun.call( null, "這還是一個(gè)函數(shù)", "..." );// 顯示 這還是一個(gè)函數(shù)...
bind()方法

表示創(chuàng)建一個(gè)新的函數(shù)(稱為綁定函數(shù))

該方法接收兩個(gè)參數(shù)

第一個(gè) - this

第二個(gè) - 函數(shù)的參數(shù)

需求多少參數(shù),寫多少參數(shù),使用逗號(hào)分隔

該方法的返回值 - 返回一個(gè)新的函數(shù)

返回的新函數(shù) - 是對(duì)指定函數(shù)進(jìn)行復(fù)制得到的

兩個(gè)函數(shù)對(duì)函數(shù)體進(jìn)行修改不會(huì)相互影響

/* 定義一個(gè)函數(shù) */
function fun( can, shu ) {
    console.log( can + shu );
}
/* 根據(jù)函數(shù)語法正常調(diào)用函數(shù) - 對(duì)參數(shù)進(jìn)行修改 */
fun( "...", "這是一個(gè)函數(shù)" );// 顯示 這是一個(gè)函數(shù)...   修改后顯示 ...這是一個(gè)函數(shù)

/*
    根據(jù)Function對(duì)象提供的bind()方法進(jìn)行函數(shù)調(diào)用
     * 參數(shù) this 可以先用 null 站位
     * 兩個(gè)函數(shù)之間不會(huì)有影響
 */
var fn = fun.bind( null, "這還是一個(gè)函數(shù)", "..." );
fn();// 顯示 這還是一個(gè)函數(shù)...
重載

表示定義多個(gè)同名的函數(shù),但每個(gè)函數(shù)可接收的參數(shù)不同

在調(diào)用時(shí)會(huì)進(jìn)行判斷,函數(shù)會(huì)根據(jù)形參可接收的個(gè)數(shù)去匹配傳入實(shí)參個(gè)數(shù)相同的

注意

在JavaScript的函數(shù)中不存在重載

當(dāng)函數(shù)同名時(shí),最后一次定義的函數(shù)有效

/* 重載現(xiàn)象 */
function fn( a, b ){
    return a + b;
}
function fn( a, b, c ){
    return a + b + c;
}
function fn( a, b, c, d ){
    return a + b + c + d;
}
/* 重載的正常顯示 */
fn( 1, 2 );// 顯示 3
fn( 1, 2, 3 );// 顯示 6
fn( 1, 2, 3, 4 );// 顯示 10
/* JavaScript中的顯示結(jié)果 */
console.log( fn( 1, 2 ) );// 顯示 NaN
console.log( fn( 1, 2, 3 ) );// 顯示 NaN
console.log( fn( 1, 2, 3, 4 ) );// 顯示 10
arguments對(duì)象

該對(duì)象可以獲取當(dāng)前指定函數(shù)中的所以參數(shù)(實(shí)參),并存儲(chǔ)到一個(gè)類數(shù)組中

該對(duì)象只能在函數(shù)中使用

length屬性 - 表示函數(shù)中參數(shù)的個(gè)數(shù)

該方法可以模擬實(shí)現(xiàn)函數(shù)的重載

function fun(){
    /* 通過length屬性獲取函數(shù)參數(shù)的個(gè)數(shù) */
    var add = arguments.length;
    /* 再通過條件語句進(jìn)行判斷 */
    switch ( add ) {
        /* 根據(jù)參數(shù)的個(gè)數(shù)進(jìn)行顯示 */
        case 2:
            /* 由于arguments對(duì)象將獲取到的參數(shù)儲(chǔ)存到一個(gè)類數(shù)組中,可以使用數(shù)組的方式進(jìn)行提取 */
            return arguments[0] + arguments[1];
            break;
        case 3:
            return arguments[0] + arguments[1] + arguments[2];
            break;
        case 4:
            return arguments[0] + arguments[1] + arguments[2] + arguments[3];
            break;
    }
}
/* 可以模擬出重載的效果 */
console.log( fun( 1, 2 ) );// 顯示 3
console.log( fun( 1, 2, 3 ) );// 顯示 6
console.log( fun( 1, 2, 3, 4 ) );// 顯示 10
遞歸

表示在一個(gè)函數(shù)中,調(diào)用自身

注意

如果不給遞歸設(shè)置一個(gè)出口,會(huì)出現(xiàn)類似于循環(huán)語句中的 死循環(huán)

解決

通過在遞歸的過程中不斷改變數(shù)據(jù)值

在進(jìn)行條件判斷來設(shè)置出口

利用return語句的結(jié)束效果,結(jié)束遞歸

arguments對(duì)象的callee屬性

該屬性表示當(dāng)前正在執(zhí)行的函數(shù)

function fun() {
    console.log( "啊哈哈" );
    /*
        調(diào)用自身函數(shù) - 實(shí)現(xiàn)遞歸
         * 會(huì)出現(xiàn)類似于循環(huán)語句中的 死循環(huán)
     */
    fun();
}
fun();

/* 可以設(shè)置一個(gè)循環(huán)出口 */
function fn( a ) {
    console.log( a );
    /* 通過條件判斷來設(shè)置出口 */
    if ( a >= 10 ) {
        /* 利用return語句的結(jié)束效果,結(jié)束遞歸 */
        return;
    }
    /* 在遞歸的過程中不斷改變數(shù)據(jù)值 */
    fn( a + 1 );
}
/* 傳入一個(gè)數(shù)值用于條件判斷 */
fn( 0 );

/* 如果將遞歸函數(shù)賦值個(gè)一個(gè)變量,再將遞歸函數(shù)清空釋放,在去執(zhí)行變量會(huì)出錯(cuò) */
function fu( b ) {
    console.log( b );
    if ( b >= 10 ) {
        return;
    }
    /*
        新函數(shù)(s)在執(zhí)行時(shí),內(nèi)部的函數(shù)體,依然是舊函數(shù)(fu)的
        當(dāng)執(zhí)行到改變數(shù)據(jù)值時(shí),調(diào)用的目標(biāo)依舊是舊函數(shù)(fu)而沒有更改成新函數(shù)(s)
        所以會(huì)報(bào)錯(cuò) - TypeError: fu is not a function

        可以通過arguments對(duì)象的callee屬性去替換函數(shù)名
        arguments對(duì)象的callee屬性
         * 該屬性表示當(dāng)前正在執(zhí)行的函數(shù)
     */
    // fu( b + 1 );
    /* 修改后在執(zhí)行就可正常顯示 */
    arguments.callee( b + 1 );
}
fu( 0 );
/* 將遞歸函數(shù)賦值個(gè)一個(gè)變量 */
var s = fu;
/* 將遞歸函數(shù)清空釋放 */
fu = null;
/* 使用函數(shù)方式執(zhí)行變量 */
s( 0 );
/* 會(huì)報(bào)錯(cuò) */
console.log( s );// 顯示 fu is not a function
匿名函數(shù)

表示定義一個(gè)沒有函數(shù)名的函數(shù)

匿名函數(shù)的用法

將匿名函數(shù)作為參數(shù)傳遞給其他函數(shù)

這種方法也可以叫做 回調(diào)函數(shù)

將匿名函數(shù)用于執(zhí)行一次性任務(wù)

這種方法也可以叫做 自調(diào)函數(shù)

/* 創(chuàng)建一個(gè)匿名函數(shù) */
function (){
    console.log( "啊哈哈" );
}
回調(diào)函數(shù)

表示一個(gè)函數(shù)做為參數(shù)傳入到另一個(gè)函數(shù)中

/* 定義一個(gè)函數(shù) - 該函數(shù)做為另一個(gè)函數(shù)的參數(shù) */
var fn = function () {
    return 10;
}

/* 定義另一個(gè)函數(shù) */
var fun = function ( f ) {
    /* 傳進(jìn)該函數(shù)體中的是一個(gè)函數(shù),可以直接調(diào)用 */
    return f();
}
/* 當(dāng)前函數(shù)的參數(shù)為另一個(gè)函數(shù) */
var s = fun( fn );
console.log( s );// 顯示 10
自調(diào)函數(shù)

表示在定義函數(shù)后自行調(diào)用

用法

第一種 - 兩個(gè)小括號(hào)

第一個(gè)小括號(hào) - 定義匿名函數(shù)

第二個(gè)小括號(hào) - 調(diào)用

/* 第一種方法 */
(function(){
    console.log( "啊哈哈" );
})();

第二種 - 一個(gè)小括號(hào)中包含另一個(gè)小括號(hào)

第一個(gè)小括號(hào) - 定義匿名函數(shù)

第二個(gè)小括號(hào)(被包含的) - 調(diào)用

/* 第二種方法 */
(function(){
    console.log( "呀吼吼" );
}());

第三種 - 嘆號(hào) + 小括號(hào)

嘆號(hào)后寫匿名函數(shù)

小括號(hào) - 調(diào)用

/* 第三種方法 */
!function(){
    console.log( "哦哦哦" );
}();
作為值的函數(shù)

表示一個(gè)函數(shù)做為另一個(gè)函數(shù)的返回值

function fun() {
    var s = 10;
    return function () {
        return s;
    }
}
console.log( fun()() );// 顯示 10
作用域鏈

表示函數(shù)作用域有權(quán)限訪問除自身內(nèi)部的函數(shù)作用域之外的其他作用域

并且會(huì)把次特性傳遞個(gè)自身內(nèi)部的函數(shù)作用域

var a = 100;// 全局變量
function fun1(){
    var b = 200;// fun1函數(shù)作用域的局部變量
    // 內(nèi)部函數(shù)
    function fun2(){
        var c = 300;// fun2函數(shù)作用域的局部變量
        // 內(nèi)部函數(shù)
        function fun3(){
            var d = 400;// fun3函數(shù)作用域的局部變量
            // 調(diào)用變量
            console.log(a);// 100
            console.log(b);// 200
            console.log(c);// 300
            console.log(d);// 400
        }
        fun3();
        // 調(diào)用變量
        // console.log(a);// 100
        // console.log(b);// 200
        // console.log(c);// 300
        // console.log(d);// d is not defined
    }
    fun2();
    // 調(diào)用變量
    // console.log(a);// 100
    // console.log(b);// 200
    // console.log(c);// c is not defined
    // console.log(d);// d is not defined
}
fun1();
閉包理論

表示在全局作用域可以訪問到函數(shù)作用域中的數(shù)據(jù)

作用域的逆向操作(個(gè)人理解)

/* 定義一個(gè)全局變量但不賦值 */
var s;
function fun(){
    var v = 100;
    /* 在函數(shù)作用域中對(duì)全局變量進(jìn)行賦值 */
    s = function(){
        console.log(v);
    }
    s();
}
fun();// 顯示函數(shù)體的內(nèi)容 100
/* 訪問全局變量會(huì)得到在函數(shù)作用域中數(shù)值 */
s();// 顯示全局變量的值 100

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108222.html

相關(guān)文章

  • 面向對(duì)象JavaScript繼承(一) 類式繼承

    摘要:那你們肯定會(huì)問為什么共用,而沒有共用呢,下面就給你解釋,請(qǐng)看引用類型是共用的值類型是私用的。 引言 面向?qū)ο蟮木幊陶Z言都具繼承這一機(jī)制,而 JavaScript 是基于原型(Prototype)面向?qū)ο蟪绦蛟O(shè)計(jì),所以它的實(shí)現(xiàn)方式也是基于原型(Prototype)實(shí)現(xiàn)的. 繼承的方式 類式繼承 構(gòu)造函數(shù)繼承 組合繼承 原型式繼承 寄生式繼承 寄生組合式繼承 1.類式繼承 //聲明父...

    forsigner 評(píng)論0 收藏0
  • javascript面向對(duì)象總結(jié)

    摘要:之面向?qū)ο罂偨Y(jié)前言在中是沒有類的概念的,所以它的對(duì)象與基于類的語言中的對(duì)象不同。一理解對(duì)象張三上面通過構(gòu)造函數(shù)創(chuàng)建了一個(gè)對(duì)象,并為它添加了三個(gè)屬性。 JavaScript之面向?qū)ο罂偨Y(jié) 前言:在ECMAScript中是沒有類的概念的,所以它的對(duì)象與基于類的語言中的對(duì)象不同。ECMA-262把對(duì)象總結(jié)為:無序?qū)傩缘募?,其屬性包含基本值、?duì)象或者函數(shù)。 一、理解對(duì)象 var person...

    taowen 評(píng)論0 收藏0
  • 溫故知新javascript面向對(duì)象

    摘要:應(yīng)該非常小心,避免出現(xiàn)不使用命令直接調(diào)用構(gòu)造函數(shù)的情況。上面代碼表示,使用屬性,確定實(shí)例對(duì)象的構(gòu)造函數(shù)是,而不是。當(dāng)然,從繼承鏈來看,只有一個(gè)父類,但是由于在的實(shí)例上,同時(shí)執(zhí)行和的構(gòu)造函數(shù),所以它同時(shí)繼承了這兩個(gè)類的方法。 基本概念 類和實(shí)例是大多數(shù)面向?qū)ο缶幊陶Z言的基本概念 類:類是對(duì)象的類型模板 實(shí)例:實(shí)例是根據(jù)類創(chuàng)建的對(duì)象但是,JavaScript語言的對(duì)象體系,不是基于類的,...

    趙連江 評(píng)論0 收藏0
  • JavaScript面向對(duì)象Function類型

    摘要:一類型概述與函數(shù)函數(shù)聲明方式字面量方式判斷函數(shù)是否為類型中所有函數(shù)都是類型的對(duì)象創(chuàng)建類型的對(duì)象是個(gè)函數(shù)函數(shù)名參數(shù)函數(shù)體由于函數(shù)的參數(shù)和函數(shù)體都是以字符串形式傳遞給以函數(shù)方式進(jìn)行調(diào)用屬性定義一個(gè)構(gòu)造函數(shù)犬夜叉使用構(gòu)造函數(shù)創(chuàng)建對(duì)象對(duì)象具有與構(gòu) JS(JavaScript) 一.Function類型概述1.Function與函數(shù); // 函數(shù)聲明方式 function fun(){ ...

    mingde 評(píng)論0 收藏0
  • JS面向對(duì)象的程序設(shè)計(jì)繼承的實(shí)現(xiàn) - 原型鏈

    摘要:簡(jiǎn)單回顧一下構(gòu)造函數(shù)原型和實(shí)例對(duì)象之間的關(guān)系每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象。找到生成構(gòu)造函數(shù)的原型對(duì)象的構(gòu)造函數(shù),搜索其原型對(duì)象,找到了。 JS面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承的實(shí)現(xiàn) - 原型鏈 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaS...

    zhaochunqi 評(píng)論0 收藏0
  • JS面向對(duì)象的程序設(shè)計(jì)繼承-繼承的實(shí)現(xiàn)-借用構(gòu)造函數(shù)

    摘要:面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承繼承的實(shí)現(xiàn)借用構(gòu)造函數(shù)前言最近在細(xì)讀高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。繼承了注意,這一段代碼借調(diào)了超類型的構(gòu)造函數(shù)。 JS面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承-繼承的實(shí)現(xiàn)-借用構(gòu)造函數(shù) 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下...

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

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

0條評(píng)論

閱讀需要支付1元查看
<