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

資訊專欄INFORMATION COLUMN

JavaScript面向?qū)ο缶幊獭狥unction類型

Object / 3316人閱讀

摘要:在中,函數(shù)也是以對象的形式存在的。也可以使用對象作為參數(shù)返回值調(diào)用該函數(shù)的返回結(jié)果。調(diào)用自身的函數(shù)被稱之為遞歸函數(shù)。默認(rèn)名字的函數(shù)被稱之為匿名函數(shù)。內(nèi)部函數(shù)在函數(shù)中聲明內(nèi)嵌函數(shù),內(nèi)嵌函數(shù)對函數(shù)中的局部變量進(jìn)行訪問。

Function類型 Function與函數(shù)

函數(shù)它只定義一次,但可能被執(zhí)行或調(diào)用多次 。
Function類型是JavaScript提供的引用類型之一,通過Function類型創(chuàng)建Function對象。
在JavaScript中,函數(shù)也是以對象的形式存在的。每個函數(shù)都是一個Function對象。函數(shù)名,本質(zhì)就是一個變量名,是指向某個Function對象的引用。

// 1.函數(shù)聲明方式
function fun(){
    console.log("this is function");
}
// 2.字面量方式
var fn = function(){
    console.log("this is function too");
}
// 判斷函數(shù)是否為Function類型的
console.log(fun instanceof Function);// true
console.log(fn instanceof Function);// true
// JavaScript中所有的函數(shù)都是Function類型的對象

/*
    3.創(chuàng)建Function類型的對象 -> 是一個函數(shù)
      var 函數(shù)名 = new Function(參數(shù),函數(shù)體);
      * 由于函數(shù)的參數(shù)和函數(shù)體都是以字符串形式傳遞給Function的
  */
var f = new Function("a","console.log(a)");
f(100);// 以函數(shù)方式進(jìn)行調(diào)用
Function類型 構(gòu)造函數(shù)

在JavaScript中,函數(shù)除了可以通過函數(shù)定義語句或字面量表達(dá)式兩種方式定義之外,還可以通過Function類型進(jìn)行定義。(注意:通過Function類型定義函數(shù)的效率遠(yuǎn)不如通過函數(shù)定義語句或字面量表達(dá)式兩種方式定義。目前,定義函數(shù)具有三種方式,這三種方式之間存在一定的差別。)

// 1.Object與Function都是自身的類型
console.log(Object instanceof Object);// true
console.log(Function instanceof Function);// true
// 2.Object自身是構(gòu)造函數(shù),而構(gòu)造函數(shù)也是函數(shù),是函數(shù)都是Function類型
console.log(Object instanceof Function);// true
// 3.Function是引用類型,用于創(chuàng)建對象,是對象都是Object類型
console.log(Function instanceof Object);// true
// 變量的聲明提前
console.log(v);// undefined
var v = 100;
// 如果使用函數(shù)聲明方式定義函數(shù)時 -> 函數(shù)的聲明提前
fun();
function fun(){
    console.log("this is function");
}
apply()方法

Function的apply()方法用于調(diào)用一個函數(shù),并且接受指定的this值,以及一個數(shù)組作為參數(shù)。
語法結(jié)構(gòu):
1.thisArg參數(shù):可選項(xiàng),在func函數(shù)運(yùn)行時使用this值。
2.argsArray參數(shù):可選項(xiàng),一個數(shù)組或者類數(shù)組對象,其中你那個的數(shù)組元素將作為多帶帶的參數(shù)傳給func函數(shù)。也可以使用argments對象作為參數(shù)
3.返回值:調(diào)用該函數(shù)的返回結(jié)果。

// 定義函數(shù)
function fun(value){
    console.log("this is " + value);
}
// 函數(shù)的調(diào)用方式
fun("function");// 語法結(jié)構(gòu):函數(shù)名稱()

    apply(thisArg,argArray)方法 -> 用于調(diào)用一個指定函數(shù)
     參數(shù)
       thisArg - this
       argArray - 數(shù)組,作為參數(shù)(實(shí)參)的列表
  
fun.apply(null, ["function"]);
call()方法

Function的call()方法用于調(diào)用一個函數(shù),并且接收指定的this值作為參數(shù),以及參數(shù)列表。
語法結(jié)構(gòu):
1.thisArg參數(shù):在func函數(shù)運(yùn)行時使用的this值。
2.arg1,arg2,...參數(shù):指定的參數(shù)列表。
3.返回值:調(diào)用該函數(shù)的返回結(jié)果。
apply()與call()非常相似,不同之處在于提供參數(shù)的方式。

bind()方法

Function的bind()方法用于創(chuàng)建一個新的函數(shù)(稱之為綁定函數(shù)),并且接收指定的this值作為參數(shù),以及參數(shù)列表。

// 定義函數(shù)
function fun(value){
    console.log("this is " + value);
}
/*
    bind(thisArg, arg1, arg2, ...)方法
    * 作用 - 用于創(chuàng)建一個新函數(shù)(稱為綁定函數(shù))
    * 參數(shù)
      * thisArg - this
       arg1, arg2, ... - 表示參數(shù)列表
    * 返回值 - 返回新的函數(shù)
 */
// var f = fun.bind();// 相對于從指定函數(shù)復(fù)制一份出來
// console.log(f);
// f();

fun("周芷若");// this is 周芷若

var f = fun.bind(null, "張無忌");
f();// this is 張無忌
沒有重載

在其他開發(fā)語言中,函數(shù)具有一種特性,叫做重載。所謂的重載,就是定義多個同名的函數(shù),但每一個函數(shù)接收的參數(shù)的個數(shù)不同,程序會根據(jù)調(diào)用是傳遞的實(shí)參個數(shù)進(jìn)行判斷,具體調(diào)用的是哪個函數(shù)。

// 定義函數(shù)
function fun(value){
    console.log("this is " + value);
}

    bind(thisArg, arg1, arg2, ...)方法
     作用 - 用于創(chuàng)建一個新函數(shù)(稱為綁定函數(shù))
     參數(shù)
       thisArg - this
       arg1, arg2, ... - 表示參數(shù)列表
     返回值 - 返回新的函數(shù)
 
 var f = fun.bind();// 相對于從指定函數(shù)復(fù)制一份出來
 console.log(f);
 f();

fun("周芷若");// this is 周芷若

var f = fun.bind(null, "張無忌");
f();// this is 張無忌

但在JavaScript中函數(shù)時沒有重載現(xiàn)象的。也就是說,如果同時定義多個同名函數(shù),只有最后一個定義的函數(shù)時有效的。
不過,JavaScript提供的arguments對象,該對象可以模擬函數(shù)重載的現(xiàn)象。arguments對象是函數(shù)內(nèi)部的本地變量;arguments已經(jīng)不再是函數(shù)的屬性了。
arguments對象可以獲取函數(shù)的所有參數(shù),但arguments對象并不是一個數(shù)組,而是一個類數(shù)組對象(沒有數(shù)組特有的方法)。

遞歸

在一個函數(shù)體內(nèi),如果想調(diào)用自身函數(shù)的話,有兩種方式;
1.通過使用自身函數(shù)實(shí)現(xiàn)
2.通過使用arguments對象的callee屬性實(shí)現(xiàn)。
調(diào)用自身的函數(shù)被稱之為遞歸函數(shù)。在某種意義上,遞歸近似于循環(huán)。兩者都重復(fù)執(zhí)行相同的代碼,并且兩者都需要一個終止條件以避免無限循環(huán)或者無限遞歸。

/* 函數(shù)的遞歸 -> 就是在指定函數(shù)的函數(shù)體中調(diào)用自身函數(shù)
function fun(){
    // 當(dāng)前函數(shù)的邏輯內(nèi)容
    console.log("this is function");
    // 調(diào)用自身函數(shù) -> 實(shí)現(xiàn)遞歸
    fun();
}
fun();
*/

function fn(v){
    console.log(v);
    if (v >= 10) {
        return;
    }
    // fn(v + 1);
    arguments.callee(v + 1);
}
fn(0);//導(dǎo)致出錯

var f = fn;
fn = null;
f(0);
// console.log(f);
特殊函數(shù) 匿名函數(shù)

JavaScript可以將函數(shù)作為數(shù)據(jù)使用。作為函數(shù)本體,他就像普通的數(shù)據(jù)一樣,不一定要有名字。默認(rèn)名字的函數(shù)被稱之為匿名函數(shù)。
匿名函數(shù)的兩種用法:
1.可以將匿名函數(shù)作為從參數(shù)傳遞給其他函數(shù)。這樣,接收函數(shù)就能利用所傳遞的函數(shù)來完成某些事請。
2.可以定義某個匿名函數(shù)來執(zhí)行某些一次性任務(wù)。

 JavaScript語法中,定義函數(shù)必須定義函數(shù)名稱 -> 匿名函數(shù)
function (){
    console.log("this is function");
}


    匿名函數(shù)的作用:
    1.將匿名函數(shù)作為參數(shù)傳遞給其他函數(shù) -> 回調(diào)函數(shù)
    2.將匿名函數(shù)用于執(zhí)行一次性任務(wù) -> 自調(diào)函數(shù)
 
回調(diào)函數(shù)

當(dāng)一個函數(shù)作為參數(shù)傳遞給另一個函數(shù)時,作為參數(shù)的函數(shù)被稱之為回調(diào)函數(shù)。

// 作為另一個函數(shù)(fn)的參數(shù)的函數(shù)(one) -> 回調(diào)函數(shù)
var one = function(){
    return 1;
}

function fn(v){
    return v();
}
// one函數(shù)僅是作為fn函數(shù)的參數(shù)出現(xiàn) -> 并不是調(diào)用
// var result = fn(one);
/*
    以上代碼等價于以下代碼
    以下代碼中作為參數(shù)的函數(shù) -> 匿名回調(diào)函數(shù)
  */
var result = fn(function(){return 1;});

console.log(result);// 1
自調(diào)函數(shù)

所謂自調(diào)函數(shù)就是在定義函數(shù)后自行調(diào)用。
1.第一對括號的作用,放置的是一個匿名函數(shù)。匿名函數(shù)接受一個參數(shù)
2.第二個對括號的作用,是‘立即調(diào)用’。在調(diào)用時,向匿名函數(shù)傳遞參數(shù)內(nèi)內(nèi)容。
自調(diào)函數(shù)只需將匿名函數(shù)的定義放進(jìn)一對括號中,然后外面在跟一個對括號。

    自調(diào)函數(shù) - 定義即調(diào)用的函數(shù)
     第一個小括號 - 用于定義函數(shù)
     第二個小括號 - 用于調(diào)用函數(shù)
 
// 全局作用域 - 生命周期:JavaScript文件從執(zhí)行到執(zhí)行完畢
(function(value){
    // 函數(shù)作用域 - 生命周期:從函數(shù)調(diào)用到調(diào)用完畢
    console.log("this is " + value);
})("function");
// 表達(dá)式語法
(function(value){
    // 函數(shù)作用域 - 生命周期:從函數(shù)調(diào)用到調(diào)用完畢
    console.log("this is " + value);
}("function"));

!function(value){
    // 函數(shù)作用域 - 生命周期:從函數(shù)調(diào)用到調(diào)用完畢
    console.log("this is " + value);
}("function");

+function(value){
    // 函數(shù)作用域 - 生命周期:從函數(shù)調(diào)用到調(diào)用完畢
    console.log("this is " + value);
}("function");
作為值的函數(shù)

將一個函數(shù)作為另一個函數(shù)的結(jié)果進(jìn)行返回,作為結(jié)果返回的函數(shù)稱之為作為置的函數(shù)。

var one = function(){
    return 100;
}
// 作為值的函數(shù) -> 內(nèi)部函數(shù)的一種特殊用法
function fun(){
    var v = 100;
    // 內(nèi)部函數(shù)
    return function(){
        return v;
    };
}

var result = fun();
// console.log(result);// one函數(shù)
// console.log(result());// 100

console.log(fun()());
閉包 作用域鏈

很多開發(fā)語言中都具有塊級作用域,但ECMAScript5版本中并沒有跨級作用域,這經(jīng)常會導(dǎo)致理解上的困惑。
雖然ECMAScript5版本沒有塊級作用域,但具有函數(shù)作用域。在某個函數(shù)內(nèi)部定義的變量的作用域就是該函數(shù)作用域。
每一段JavaScript代碼(全局代碼或函數(shù))都有一個與之關(guān)聯(lián)的作用域。這個作用域鏈?zhǔn)且粋€對象列表或鏈表,這組最想定義了這段代碼“作用域中”的變量。

var a = 10;// 全局變量
function fun(){
    var b = 100;// fun函數(shù)作用域的局部變量
    // 內(nèi)部函數(shù)
    function fn(){
        var c = 200;// fn函數(shù)作用域的局部變量
        // 內(nèi)部函數(shù)
        function f(){
            var d = 300;// f函數(shù)作用域的布局變量
            // 調(diào)用變量
            console.log(a);// 10
            console.log(b);// 100
            console.log(c);// 200
            console.log(d);// 300
        }
        f();
        // 調(diào)用變量
        // console.log(a);// 10
        // console.log(b);// 100
        // console.log(c);// 200
        // console.log(d);// d is not defined
    }
    fn();
    // 調(diào)用變量
    // console.log(a);// 10
    // console.log(b);// 100
    // console.log(c);// c is not defined
    // console.log(d);// d is not defined
}
fun();
閉包是什么

JavaScript允許函數(shù)嵌套,并且內(nèi)部函數(shù)可以訪問定義在外部函數(shù)中的所有變量和函數(shù),以及外部函數(shù)能訪問的所有變量和函數(shù)。但是,外部函數(shù)卻不能訪問定義在內(nèi)部函數(shù)中的變量和函數(shù)。
當(dāng)內(nèi)部函數(shù)以某種方式唄任何一個外部函數(shù)作用域訪問時,一個閉包就產(chǎn)生了。
閉包就是詞法表示包括不必計(jì)算的變量的函數(shù),也就是說,該函數(shù)能使用函數(shù)外定義的變量。

var n;// 定義變量,但不初始化值
function fun(){// 函數(shù)作用域
    var v = 100;
    // 進(jìn)行初始化值 -> 一個函數(shù)
    n = function(){
        console.log(v);
    }
    // n();
}
fun();

n();// 100

閉包的特點(diǎn)和作用
特點(diǎn):
1.局部變量:在函數(shù)中定義有共享意義的局部變量。
2.內(nèi)部函數(shù):在函數(shù)(f)中聲明內(nèi)嵌函數(shù),內(nèi)嵌函數(shù)(g)對函數(shù)(f)中的局部變量進(jìn)行訪問。
3.外部使用:函數(shù)(f)向外返回此內(nèi)嵌函數(shù)(g),外部可以通過此內(nèi)嵌函數(shù)持有并訪問聲明在函數(shù)(f)中的局部變量,而此變量在外部是通過其他途徑無法訪問的。
作用
1.提供可共享的局部變量。
2.保護(hù)共享的局部變量。提供專門的讀寫變量的函數(shù)。
3.避免全局污染。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108228.html

相關(guān)文章

  • JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐 | 01 - 面向對象JavaScript

    摘要:在中,并沒有對抽象類和接口的支持。例如,當(dāng)對象需要對象的能力時,可以有選擇地把對象的構(gòu)造器的原型指向?qū)ο螅瑥亩_(dá)到繼承的效果。本節(jié)內(nèi)容為設(shè)計(jì)模式與開發(fā)實(shí)踐第一章筆記。 動態(tài)類型語言 編程語言按數(shù)據(jù)類型大體可以分為兩類:靜態(tài)類型語言與動態(tài)類型語言。 靜態(tài)類型語言在編譯時已確定變量類型,動態(tài)類型語言的變量類型要到程序運(yùn)行時,待變量被賦值后,才具有某種類型。 而JavaScript是一門典型...

    suxier 評論0 收藏0
  • 面向對象JavaScript(如何一步步成為js高手)

    摘要:雖然,也是面向疾苦的語言,但是,它和靜態(tài)類型語言的面向接口編程不一而足。對象對他自己的行為負(fù)責(zé),其他對象不關(guān)心它的內(nèi)部實(shí)現(xiàn)。 ‘工欲善其事,必先利其器’,在深入學(xué)習(xí)JavaScript之前,我認(rèn)為我們很有必要了解以下,JavaScript這門面向?qū)ο蟮膭討B(tài)語言到底是一門什么樣的語言。 JavaScript vs 其他面向?qū)ο笳Z言 它沒有使用像Java等傳統(tǒng)的面向?qū)ο笳Z言的類式繼承,而...

    peixn 評論0 收藏0
  • JavaScript面向對象編程-封裝

    摘要:前言面向?qū)ο缶幊淌菍⑿枨蟪橄蟪梢粋€對象,針對對象分析其特征屬性和動作方法。面向?qū)ο缶幊趟枷肫渲幸粋€特點(diǎn)就是封裝,就是把需要的功能放在一個對象里。將閉包作為創(chuàng)建對象的構(gòu)造函數(shù)。 前言 面向?qū)ο缶幊淌菍⑿枨蟪橄蟪梢粋€對象,針對對象分析其特征(屬性)和動作(方法)。這個對象我們稱之為類。面向?qū)ο缶幊趟枷肫渲幸粋€特點(diǎn)就是封裝,就是把需要的功能放在一個對象里。但是JavaScript這種解釋性的...

    taoszu 評論0 收藏0
  • JS程序

    摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識只有分享才有存在的意義。 是時候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...

    melody_lql 評論0 收藏0
  • JavaScript中的面向對象(object-oriented)編程

    摘要:對象在中,除了數(shù)字字符串布爾值這幾個簡單類型外,其他的都是對象。那么在函數(shù)對象中,這兩個屬性的有什么區(qū)別呢表示該函數(shù)對象的原型表示使用來執(zhí)行該函數(shù)時這種函數(shù)一般成為構(gòu)造函數(shù),后面會講解,新創(chuàng)建的對象的原型。這時的函數(shù)通常稱為構(gòu)造函數(shù)。。 本文原發(fā)于我的個人博客,經(jīng)多次修改后發(fā)到sf上。本文仍在不斷修改中,最新版請?jiān)L問個人博客。 最近工作一直在用nodejs做開發(fā),有了nodejs,...

    JerryZou 評論0 收藏0
  • JavaScript面向對象編程簡明教程

    摘要:這樣每個實(shí)例獨(dú)享自己的屬性,并和其他同類型的實(shí)例共享方法構(gòu)造函數(shù)原型以上這種方式定義的類型,可以通過來判斷一個實(shí)例是否是類型的實(shí)際上是通過實(shí)例的原型鏈來判斷一個對象是否某個類型的實(shí)例的,具體的細(xì)節(jié)后面會詳細(xì)介紹。 JavaScript面向?qū)ο缶幊? 如何定義自定義類型 首先需要明確,JavaScript并不是傳統(tǒng)意義上的OO語言,它并沒有class的概念, 而是包含了另一套異常強(qiáng)大的...

    myeveryheart 評論0 收藏0

發(fā)表評論

0條評論

Object

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<