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

資訊專欄INFORMATION COLUMN

JavaScript...Function類型...

Eirunye / 2725人閱讀

摘要:類型與函數(shù)函數(shù)是這樣一段代碼它只定義一次但可能被執(zhí)行或調(diào)用多次類型是提供的引用類型之一通過(guò)類型創(chuàng)建對(duì)象在中函數(shù)也是以對(duì)象的形式存在的每個(gè)函數(shù)都是一個(gè)對(duì)象函數(shù)名本質(zhì)就是一個(gè)變量名是指向某個(gè)對(duì)象的引用函數(shù)聲明方式字面量方式判斷函數(shù)是否為類型的中

Function類型 Function與函數(shù)

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

// 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類型的對(duì)象

/*
    3.創(chuàng)建Function類型的對(duì)象 - 是一個(gè)函數(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)用

Object與Function

// 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)建對(duì)象,是對(duì)象都是Object類型
console.log(Function instanceof Object);// true

代碼的執(zhí)行流程

..變量的聲明提前
console.log(v);//undefined
var v = 100;
//如果使用函數(shù)聲明方式定義函數(shù)時(shí) - 函數(shù)的聲明提前
fun()
function fun(){
    console.log("this is function");
}
Function類型

Function的apply()方法

Function的apply()方法用于調(diào)用一個(gè)函數(shù) 并且接受指定的this值 以及一個(gè)數(shù)組作為參數(shù)

// 定義函數(shù)
function fun(value){
    console.log("this is " + value);
}
// 函數(shù)的調(diào)用方式
fun("function");// 語(yǔ)法結(jié)構(gòu):函數(shù)名稱()
/*
    apply(thisArg,argArray)方法 -> 用于調(diào)用一個(gè)指定函數(shù)
    * 參數(shù)
      * thisArg - this
      * argArray - 數(shù)組,作為參數(shù)(實(shí)參)的列表
  */
fun.apply(null, ["function"]);

Function的call()方法

Function的call()方法用于調(diào)用一個(gè)函數(shù) 并且接受指定的this值作為參數(shù) 以及參數(shù)列表

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

fun.apply(null,["function","張三"]);
//call()方法 - 用于調(diào)用一個(gè)函數(shù)
fun.call(null,"function","張三");

Function的bind()方法

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

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

fun("李四");// this is 李四

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

重載是什么

在其他開(kāi)發(fā)語(yǔ)言中 函數(shù)具有一種特性 叫做重載 重載就是定義多個(gè)同名的函數(shù) 但每一個(gè)函數(shù)接受的參數(shù)的個(gè)數(shù)不同 程序會(huì)根據(jù)用時(shí)傳遞的實(shí)參個(gè)數(shù)進(jìn)行判斷 具體調(diào)用的是哪個(gè)函數(shù)
但是在JaveScript中 函數(shù)是沒(méi)有重載現(xiàn)象的 也就是說(shuō) 如果同時(shí)定義多個(gè)同名的函數(shù) 只有最后一個(gè)定義的函數(shù)是有效的

/*
    重載的含義
    1.定義多個(gè)同名的函數(shù),但具有數(shù)量不同的參數(shù)
    2.調(diào)用函數(shù),根據(jù)傳遞參數(shù)的個(gè)數(shù)調(diào)用指定的函數(shù)
 */
function add(a,b){
    return a + b;
}
function add(a,b,c){
    return a + b + c;
}
function add(a,b,c,d){
    return a + b + c + d;
}

add(1,2);// 3
add(1,2,3);// 6
add(1,2,3,4);// 10

// JavaScript的函數(shù)不存在重載 -> 當(dāng)函數(shù)同名時(shí),最后一次定義的函數(shù)有效
console.log(add(1,2));// NaN
console.log(add(1,2,3));// NaN
console.log(add(1,2,3,4));// 10

arguments對(duì)象

JavaScript提供了arguments對(duì)象 該對(duì)象可以模擬函數(shù)重載的現(xiàn)象 arguments對(duì)象是函數(shù)內(nèi)部的本地變量 arguments已經(jīng)不再是函數(shù)的屬性了
arguments對(duì)象可以獲取函數(shù)的所有參數(shù) 但arguments對(duì)象并不是一個(gè)數(shù)組 而是一個(gè)類數(shù)組對(duì)象(沒(méi)有數(shù)組特有的方法)

/*
    JavaScript提供arguments對(duì)象
    * 該對(duì)象存儲(chǔ)當(dāng)前函數(shù)中所有的參數(shù)(實(shí)參) - 類數(shù)組對(duì)象
    * 場(chǎng)景 - 該對(duì)象一般用于函數(shù)中
    * 作用 - 用于獲取當(dāng)前函數(shù)的所有參數(shù)
    * 屬性
    * length - 函數(shù)所有參數(shù)(實(shí)參)的個(gè)數(shù)
    * 用法 - 模擬實(shí)現(xiàn)函數(shù)的重載
 */
function add(){
    var num = arguments.length;
    switch (num) {
        case 2:
            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(add(1,2));// 3
console.log(add(1,2,3));// 6
console.log(add(1,2,3,4));// 10

函數(shù)的遞歸

調(diào)用自身的函數(shù)被稱之為遞歸函數(shù) 在某種意義上說(shuō) 遞歸近似于循環(huán) 兩者都有重復(fù)執(zhí)行相同的代碼 并且兩者都需要一個(gè)終止條件以避免無(wú)限循環(huán)或者無(wú)限遞歸

/* 函數(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);

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

匿名函數(shù)

JavaScript可以將函數(shù)作為數(shù)據(jù)使用 作為函數(shù)本體 它像普通的數(shù)據(jù)一樣 不一定要有名字 默認(rèn)名字的函數(shù)被稱之為匿名函數(shù)

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

回調(diào)函數(shù)

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

// 作為另一個(gè)函數(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);
/*
    以上代碼等價(jià)于以下代碼
    以下代碼中作為參數(shù)的函數(shù) - 匿名回調(diào)函數(shù)
  */
var result = fn(function(){return 1;});

console.log(result);// 1

回調(diào)函數(shù)的優(yōu)點(diǎn):
1.它可以在不做命名的的情況下傳遞函數(shù)(這意味著可以節(jié)省全局變量)
2.可以將一個(gè)函數(shù)調(diào)用操作委托給另一個(gè)函數(shù)(這意味著可以節(jié)省一些代碼編寫(xiě)工作)
3.回調(diào)函數(shù)也有助于提升性能

回調(diào)函數(shù)的參數(shù)

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

function fn(v){// 形參是一個(gè)函數(shù)
    return v(100);// 函數(shù)的調(diào)用體
}

// var result = fn(one);// 實(shí)參必須是一個(gè)函數(shù)

var result = fn(function(w){return w;});

console.log(result);

自調(diào)函數(shù)

自調(diào)函數(shù)就是定義函數(shù)后自行調(diào)用

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

將一個(gè)函數(shù)作為另一個(gè)函數(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()());
閉包

作用域鏈

很多開(kāi)發(fā)語(yǔ)言中都具有塊級(jí)作用域 但ECMAScript5版本中并沒(méi)有跨級(jí)作用域 這經(jīng)常會(huì)導(dǎo)致理解上的困惑
雖然ECMAScript5版本沒(méi)有塊級(jí)作用域 但具有函數(shù)作用域 在某個(gè)函數(shù)內(nèi)部定義的便利的作用域就是該函數(shù)作用域
每一段JavaScript代碼(全局代碼或函數(shù))都有一個(gè)與之關(guān)聯(liá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ù)可以訪問(wèn)定義在外部函數(shù)中的所有變量和函數(shù) 以及外部函數(shù)能訪問(wèn)的所有變量和函數(shù) 但是 外部函數(shù)卻不能夠訪問(wèn)定義在內(nèi)部函數(shù)中的變量和函數(shù)
當(dāng)內(nèi)部函數(shù)以某一種方式被任何一個(gè)外部函數(shù)作用域訪問(wèn)時(shí) 一個(gè)閉包距產(chǎn)生了
閉包就是詞法表示包括不必計(jì)算的變量的函數(shù) 也就是說(shuō) 該函數(shù)能使用函數(shù)外定義的變量

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

n();// 100

閉包的特點(diǎn)與作用

閉包的特點(diǎn):
1.局部變量:在函數(shù)中定義有共享意義(如 緩存 計(jì)數(shù)器等)的局部變量(注:定義全局變量會(huì)對(duì)外造成污染)
2.內(nèi)部函數(shù):在函數(shù)(f)中聲明有內(nèi)嵌函數(shù) 內(nèi)嵌函數(shù)(g)對(duì)函數(shù)(f)長(zhǎng)得局部變量進(jìn)行訪問(wèn)
3.外部使用:函數(shù)(f)向外返回此內(nèi)嵌函數(shù)(g) 外部可以通過(guò)此內(nèi)嵌函數(shù)持有并訪問(wèn)聲明在函數(shù)(f)中的變量 而此變量在外部是通過(guò)其他途徑無(wú)法訪問(wèn)的
閉包的作用:
1.提供可共享的局部變量
2.保護(hù)共享的局部變量 提供專門的讀寫(xiě)變量的函數(shù)
3.避免全局污染

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

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

相關(guān)文章

  • JS程序

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

    melody_lql 評(píng)論0 收藏0
  • JavaScript 編寫(xiě)規(guī)范

    摘要:如果你想了解更多關(guān)于強(qiáng)制類型轉(zhuǎn)換的信息,你可以讀一讀的這篇文章。在只使用的情況下,所帶來(lái)的強(qiáng)制類型轉(zhuǎn)換使得判斷結(jié)果跟蹤變得復(fù)雜,下面的例子可以看出這樣的結(jié)果有多怪了明智地使用真假判斷當(dāng)我們?cè)谝粋€(gè)條件語(yǔ)句中使用變量或表達(dá)式時(shí),會(huì)做真假判斷。 說(shuō)明 如果本文檔中有任何錯(cuò)誤的、不符合行規(guī)的,敬請(qǐng)斧正。 引言 不管有多少人共同參與同一項(xiàng)目,一定要確保每一行代碼都像是同一個(gè)人編寫(xiě)的。...

    MartinDai 評(píng)論0 收藏0
  • javascriptfunction(){}(),new function(),new Funct

    摘要:原型之所以被稱為原型,可能正是因?yàn)檫@種不可重載的特質(zhì)。而一旦實(shí)例化,那么將指向?qū)嵗膶?duì)象。首先是,我使用了,直接利用貓咪的年齡進(jìn)行計(jì)算得出體重返回給屬性。 和java比起來(lái),javascript真的是松散的無(wú)以復(fù)加,不過(guò)這也讓我們?cè)跓o(wú)聊之余,有精力去探討一些復(fù)雜的應(yīng)用,從而在開(kāi)發(fā)之路上,獲得一些新的想法。 javascript中的類的構(gòu)造 javascript中有對(duì)象的概念,卻沒(méi)有類...

    ranwu 評(píng)論0 收藏0
  • 回家路上想起來(lái)關(guān)于Js一個(gè)有趣的東西

    摘要:忽然在下班的地鐵上想起來(lái)兩個(gè)的小問(wèn)題,有個(gè)還和之前的吹過(guò)牛,拿出來(lái)正好說(shuō)一下吧。所以我想起來(lái)之前在上不用分號(hào)的建議是值得商榷的。   最近好像有點(diǎn)沒(méi)有之前開(kāi)心,換了公司但是沒(méi)有以前的活力了,好像記得之前每天上班下班都挺開(kāi)心的,可能主要是之前的工作氛圍真的不錯(cuò)吧,雖然技術(shù)真的不咋的。忽然在下班的地鐵上想起來(lái)兩個(gè)JavaScript的小問(wèn)題,有個(gè)還和之前的leader吹過(guò)牛,拿出來(lái)正好說(shuō)一...

    Sanchi 評(píng)論0 收藏0
  • 【譯】stackoverflow 關(guān)于JavsScript的熱門問(wèn)答

    摘要:例如,考慮比較由字符串構(gòu)造函數(shù)創(chuàng)建的字符串對(duì)象和字符串字面量這里的操作符正在檢查這兩個(gè)對(duì)象的值并返回,但是鑒于它們不是相同類型并且返回。我的建議是完全繞過(guò)這個(gè)問(wèn)題,只是不使用字符串構(gòu)造函數(shù)創(chuàng)建字符串對(duì)象。 Q1:javascript的閉包是如何工作的? 正如愛(ài)因斯坦所說(shuō)的: 如果你不能把它解釋給一個(gè)六歲的小孩,說(shuō)明你對(duì)它還不夠了解。 我曾嘗試向一個(gè)27歲的朋友解釋js閉包并且完全失敗了...

    趙春朋 評(píng)論0 收藏0

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

0條評(píng)論

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