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

資訊專(zhuān)欄INFORMATION COLUMN

JS語(yǔ)言核心——“函數(shù)”

EsgynChina / 2452人閱讀

摘要:比如,以對(duì)象的方法的形式調(diào)用函數(shù)并傳入兩個(gè)參數(shù)可以傳入的參數(shù)可以是數(shù)組和類(lèi)數(shù)組的。方法的該方法主要作用是將函數(shù)綁定至某個(gè)對(duì)象,方法返回一個(gè)新的函數(shù),調(diào)用這個(gè)新的函數(shù)會(huì)把綁定的函數(shù)在對(duì)象中當(dāng)做方法來(lái)調(diào)用。

參數(shù)

形參(parameter):函數(shù)中定義的變量

實(shí)參(argument):運(yùn)行時(shí)的函數(shù)調(diào)用時(shí)傳入的參數(shù)

上下文(context):通過(guò)對(duì)象來(lái)調(diào)用函數(shù)時(shí),這個(gè)對(duì)象就是this就是上下文;

閉包(closure):函數(shù)嵌套在函數(shù)當(dāng)中

1 函數(shù)調(diào)用的方式

有4種方法來(lái)調(diào)用JavaScript函數(shù):

作為函數(shù)

作為方法

作為構(gòu)造函數(shù)

通過(guò)call方法和apply方法間接調(diào)用

ES3 和非嚴(yán)格模式下的ES5中,調(diào)用上下文(this的值)是全局對(duì)象。在嚴(yán)格模式下,調(diào)用上下文則是undefined

1.1 函數(shù)調(diào)用

語(yǔ)法:

functionName()

window.name = "hello";
(function () {
    console.log(this); //window
})()

"use strict";
window.name = "hello";
(function () {
    console.log(this); //undefined
})()
1.2 方法調(diào)用

語(yǔ)法:

obj.functionName()

方法和this關(guān)鍵字是面向?qū)ο缶幊桃?guī)范的核心

方法鏈

方法鏈:當(dāng)方法的返回值是一個(gè)對(duì)象,這個(gè)對(duì)象還可以再調(diào)用它的方法。這個(gè)方法調(diào)用序列就是方法鏈;

1.3 構(gòu)造函數(shù)調(diào)用

沒(méi)有形參的構(gòu)造函數(shù)調(diào)用都可以省略小括號(hào)

1.4 間接調(diào)用

call方法:使用它自有的實(shí)參列表作為函數(shù)的實(shí)參;

apply方法:要求以數(shù)組的形式傳入?yún)?shù);

2 函數(shù)的實(shí)參和形參 2.1 可選形參

當(dāng)調(diào)用函數(shù)的時(shí)候傳入的實(shí)參比函數(shù)聲明時(shí)指定的形參個(gè)數(shù)要少,剩下的形參都將是undefined;所以在定義函數(shù)的時(shí)候應(yīng)當(dāng)給省略的參數(shù)賦一個(gè)默認(rèn)值:

function pushArray(o, /* optional */ a) {
    if (a === undefined) a = [];
    // a = a || [];
    for (var property in o) a.push(property);
    return a;
}
var o = {
    name: "Oliver",
    age: 18
};
var a = ["friends"];
console.log(pushArray(o, a).toString()); //friends,name,age
2.2 實(shí)參對(duì)象

省略的實(shí)參都是undefined;多出的參數(shù)自動(dòng)忽略

另外,可以通過(guò)arguments來(lái)獲取多余的參數(shù),arguments.length獲得參數(shù)個(gè)數(shù)

不定實(shí)參函數(shù)(varargs function):接收任意個(gè)數(shù)的實(shí)參

不定實(shí)參函數(shù)的實(shí)參個(gè)數(shù)不能為零;

ES5之前,arguments[0]和x指代同一個(gè)值;

function pushArray(a) {   
    console.log(a); //Array
    arguments[0] = 10;
    console.log(a); //Array
    console.log(arguments[0]); //10
}
var a = ["friends"];
pushArray(a);
2.3 將對(duì)象屬性用作實(shí)參

最好通過(guò)名值對(duì)的形式傳入?yún)?shù)(傳入的實(shí)參都寫(xiě)入一個(gè)多帶帶的對(duì)象之中,在調(diào)用的時(shí)候傳入一個(gè)對(duì)象)

function outputString(obj) {
    var fname = obj.firstName,
        lname = obj.lastName,
        age = obj.age;
    console.log(`your fisrtName: ${fname}; lastName: ${lname}; age: ${age}`);
}
outputString({firstName: "Oliver", lastName: "Young", age: 18}); //your fisrtName: Oliver; lastName: Young; 
3 作為值的函數(shù)

函數(shù)也是值,可以將函數(shù)賦值給變量,存儲(chǔ)在對(duì)象的屬性和數(shù)組的元素中,作為參數(shù)傳入另外一個(gè)函數(shù)等

函數(shù)是對(duì)象,可以定義自己的屬性

log.conter = 10;
function log () {
    console.log(log.conter);
}
log(); //10

這樣函數(shù)就不需要再定義一個(gè)全局變量

4作為命名空間的函數(shù)

將代碼放入一個(gè)函數(shù)內(nèi),然后調(diào)用這個(gè)函數(shù):

不同的寫(xiě)法:

function log (i) {
    console.log("hello" +i);
}
log(100);

(function log (i) {
    console.log("hello" + i);
}(100))

(function log (i) {
    console.log("hello" + i);
})(100)

小括號(hào)括起來(lái)避免JavaScript解釋器解析為函數(shù)聲明語(yǔ)句

5 閉包

詞法作用域(lexical scoping):函數(shù)的執(zhí)行依賴(lài)于變量作用域,這個(gè)作用域是在函數(shù)定義時(shí)決定的,而不是函數(shù)調(diào)用時(shí)決定的。

閉包:函數(shù)對(duì)象可以通過(guò)作用域相互關(guān)聯(lián)起來(lái),函數(shù)體內(nèi)部的變量都可以保存在函數(shù)作用域內(nèi)。

上面的log.conter屬性就可以使用包括在閉包中:

var pro = (function() {
    var conter = 10;

    function log(argument) {
        console.log(conter++);
    }
    return log;
})();
pro(); //10
pro(); //11
pro(); //12

使用多個(gè)嵌套函數(shù):

function counter () {
    var num = 0;
    return {
        count: function () {
            return num ++;
        },
        reset: function () {
            num = 0;
        }
    };
}
var newCounter = counter(); //這里是新的計(jì)數(shù)器,再賦值一個(gè)變量可以得到另外一個(gè)計(jì)數(shù)器,兩者不受影響
console.log(newCounter.count()); //0
console.log(newCounter.count()); //1
console.log(newCounter.count()); //2
newCounter.reset();
console.log(newCounter.count()); //0
console.log(newCounter.count()); //1
console.log(newCounter.count()); //2
6 函數(shù)屬性、方法和構(gòu)造函數(shù) 6.1 length屬性

函數(shù)的length返回的是形參的數(shù)量;函數(shù)內(nèi)部arguments.length返回的是實(shí)參的數(shù)量

function add(x, y) {
    return arguments.length;
}
console.log(add.length); //2
console.log(add(1)); //1
6.2 prototype屬性 6.3 call()和apply()方法

通過(guò)調(diào)用方法的形式來(lái)間接調(diào)用函數(shù),call和apply的第一個(gè)實(shí)參是要調(diào)用函數(shù)的母對(duì)象,它是調(diào)用上下文。

比如,以對(duì)象o的方法的形式調(diào)用函數(shù)f()并傳入兩個(gè)參數(shù):f.call(o, 1, 2)

apply可以傳入的參數(shù)可以是數(shù)組和類(lèi)數(shù)組的。

6.4 bind()方法

ES5的該方法主要作用是將函數(shù)綁定至某個(gè)對(duì)象,方法返回一個(gè)新的函數(shù),調(diào)用這個(gè)新的函數(shù)會(huì)把綁定的函數(shù)在對(duì)象中當(dāng)做方法來(lái)調(diào)用。

function add(y) {
    return this.x + y;
}
var o = {
    x: 100
};
var g = add.bind(o);
console.log(g(100)); //200

柯里化(currying):除了第一個(gè)實(shí)參外,傳入bind的實(shí)參也會(huì)綁定至this;

function add(x, y) {
    return x + y;
}
var o = {

};
var g = add.bind(o, 100); //x是100
console.log(g(100)); //200 y是100

//上面的o對(duì)象可以去掉:
function add(x, y, z) {
    return x + y + z;
}
var g = add.bind(null, 100, 100, 100); //x是100 y是100 z是100
console.log(g()); //300

//又如:
function add(y, z) {
    return this.x + y + z;
}
var g = add.bind({x:100}, 100, 100); //{x是100} y是100 z是100
console.log(g()); //300
6.5 toString()方法 6.6 Function()構(gòu)造函數(shù)

Function()構(gòu)造函數(shù)所創(chuàng)建的函數(shù)并不是使用此法作用域:

var scope = "global";
function constructFunction () {
    var scope = "local";
    return new Function("return scope");
}
console.log(constructFunction()()); //global

var scope = "global";
function constructFunction () {
    var scope = "local";
    return function () {
        return scope
    };
}
console.log(constructFunction()()); //local
6.7 可調(diào)用的對(duì)象 7 函數(shù)式編程 7.1 使用函數(shù)處理數(shù)組

如要計(jì)算元素的平均值:

var arr = [1,2,3,4,5];
var total = 0;
for (var i = 0; i < arr.length; i++) {
    total += arr[i];
};
var result = total/arr.length;
console.log(result); //3

函數(shù)式編程風(fēng)格:

var arr = [1,2,3,4,5];
function sum (a, b) {
    return a + b;
}
var total = arr.reduce(sum);
var result = total/arr.length;
console.log(result); //3
7.2 高階函數(shù)

高階函數(shù)(higher-order function):就是操作函數(shù)的函數(shù),它接收一個(gè)或多個(gè)函數(shù)作為參數(shù),并返回一個(gè)新函數(shù)

function reverse(fun) {
    return function () {
        var result = fun.apply(this, arguments);
        return !result;
    }
}
var even = function (x) {
    return x % 2 === 0;
};

var odd = reverse(even);
console.log(odd(100)); //False
console.log(even(100)); //True
7.3 不完全函數(shù) 7.4 記憶

記憶(memorization):部分結(jié)果在函數(shù)式編程中被緩存起來(lái),這種緩存技巧就是“記憶”

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

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

相關(guān)文章

  • 以vue依賴(lài)統(tǒng)計(jì)為核心的框架(函數(shù)),mve

    摘要:試用過(guò)幾回,不滿的地方,是一個(gè)框架,必須最好按它的方式來(lái)編碼,與混編,使用文件。經(jīng)過(guò)一翻網(wǎng)絡(luò)搜索,勉強(qiáng)明白了依賴(lài)更新的實(shí)現(xiàn)方式,便嘗試著自己去實(shí)現(xiàn)一個(gè)框架。如今有依賴(lài)更新這種技術(shù)的存在,我覺(jué)得找到了可能。 初接觸vue,驚為天人,它的更新方式極為取巧,但也是人們保持路人的原因:似乎沒(méi)有一個(gè)嚴(yán)格的數(shù)學(xué)證明保證按它的方式能精確更新到DOM。不過(guò)腦子里推演的似乎不會(huì)發(fā)生失敗,而且每次界面都能...

    Carl 評(píng)論0 收藏0
  • task0002(一)- JavaScript數(shù)據(jù)類(lèi)型及語(yǔ)言基礎(chǔ)

    摘要:不過(guò)讓流行起來(lái)的原因應(yīng)該是是目前所有主流瀏覽器上唯一支持的腳本語(yǔ)言。經(jīng)過(guò)測(cè)試,數(shù)字字符串布爾日期可以直接賦值,修改不會(huì)產(chǎn)生影響。再考慮對(duì)象類(lèi)型為或者的情況。對(duì)于結(jié)果聲明其類(lèi)型。判斷對(duì)象的類(lèi)型是還是,結(jié)果類(lèi)型更改。 轉(zhuǎn)載自我的個(gè)人博客 歡迎大家批評(píng)指正 1. 第一個(gè)頁(yè)面交互 這里最需要學(xué)習(xí)的老師的代碼中,每一部分功能都由函數(shù)控制,沒(méi)有創(chuàng)建一個(gè)全部變量。且最后有一個(gè)函數(shù)來(lái)控制執(zhí)行代碼...

    elarity 評(píng)論0 收藏0
  • 33 個(gè) js 核心概念(二):數(shù)據(jù)類(lèi)型

    摘要:舉個(gè)例子在上面的例子可以看到,我們聲明是一個(gè)數(shù)字,但是我們?cè)谥髮⒌闹涤指某闪俗址筒紶栔岛竺鏁?huì)講這些類(lèi)型?;绢?lèi)型字符串表示一個(gè)字符串,如。因此,我們可以寫(xiě)一個(gè)函數(shù),用來(lái)精確檢測(cè)類(lèi)型。 showImg(https://segmentfault.com/img/remote/1460000017309509?w=850&h=572); 定義 1. 什么是數(shù)據(jù)類(lèi)型? 數(shù)據(jù)類(lèi)型,就是將...

    QiShare 評(píng)論0 收藏0
  • JavaScript 簡(jiǎn)介

    摘要:簡(jiǎn)介原文鏈接簡(jiǎn)稱(chēng)是一種輕量級(jí),解釋型的編程語(yǔ)言,其函數(shù)是一等公民。標(biāo)準(zhǔn)的目標(biāo)是讓任何一種程序設(shè)計(jì)語(yǔ)言能操控使用任何一種標(biāo)記語(yǔ)言編寫(xiě)出的任何一份文檔。核心規(guī)定了如何映射基于的文檔結(jié)構(gòu),以便簡(jiǎn)化對(duì)文檔的任意部分的訪問(wèn)和操作。 JavaScript 簡(jiǎn)介 原文鏈接 JavaScript ( 簡(jiǎn)稱(chēng):JS ) 是一種 輕量級(jí),解釋型 的編程語(yǔ)言,其函數(shù)是一等公民。眾所周知,它是用于網(wǎng)頁(yè)開(kāi)發(fā)的腳...

    URLOS 評(píng)論0 收藏0
  • JS面向?qū)ο笾?【概述】

    摘要:更形象的我們還可以將面向?qū)ο罄斫鉃橐环N宗教信仰。這就導(dǎo)致面向?qū)ο蠼痰某绦騿T們?cè)趯?xiě)時(shí)就很難受。所以為了滿足信仰面向?qū)ο蠼痰男枨笸ㄟ^(guò)構(gòu)造函數(shù)的形式模擬了偽類(lèi)。這個(gè)套路的核心就是類(lèi)那么里沒(méi)有類(lèi)所以其實(shí)是通過(guò)構(gòu)造函數(shù)來(lái)模擬的偽類(lèi)。 JS面向?qū)ο笾?【概述】 在學(xué)習(xí)JS的面向?qū)ο笾?我們應(yīng)該先自問(wèn)這樣幾個(gè)問(wèn)題: 面向?qū)ο笫鞘裁匆馑? 學(xué)習(xí)面向?qū)ο蟮暮诵氖鞘裁? 為什么要學(xué)習(xí)面向?qū)ο?(它的...

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

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

0條評(píng)論

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