成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

重學(xué)前端學(xué)習(xí)筆記(十九)--JavaScript中的函數(shù)

genefy / 1163人閱讀

摘要:方法在中定義的函數(shù)。這種聲明方式會(huì)定義一個(gè)生成器函數(shù),它返回一個(gè)對(duì)象。類用定義的類,實(shí)際上也是函數(shù)。調(diào)用函數(shù)時(shí)使用的引用,決定了函數(shù)執(zhí)行時(shí)刻的值。表示當(dāng)為時(shí),取全局對(duì)象,對(duì)應(yīng)了普通函數(shù)。四操作的內(nèi)置函數(shù)和可以指定函數(shù)調(diào)用時(shí)傳入的值。

筆記說(shuō)明
重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整的可以加入winter的專欄學(xué)習(xí)【原文有winter的語(yǔ)音】,如有侵權(quán)請(qǐng)聯(lián)系我,郵箱:[email protected]。
一、函數(shù) 1.1、普通函數(shù)
function 關(guān)鍵字定義的函數(shù)。
function kaimo(){
    // code
}
1.2、箭頭函數(shù)
=> 運(yùn)算符定義的函數(shù)。
const kaimo = () => {
    // code
}
1.3、方法
class 中定義的函數(shù)。
class KK {
    kaimo(){
        //code
    }
}
1.4、生成器函數(shù)
function* 定義的函數(shù)。這種聲明方式會(huì)定義一個(gè)生成器函數(shù) (generator function),它返回一個(gè)  Generator  對(duì)象。
function* kaimo(){
    // code
}
1.5、類
class 定義的類,實(shí)際上也是函數(shù)。
class KK {
    constructor(){
        //code
    }
}
1.6、異步函數(shù)
普通函數(shù)、箭頭函數(shù)和生成器函數(shù)加上 async 關(guān)鍵字。
async function kaimo(){
    // code
}

const kaimo = async () => {
    // code
}

async function kaimo*(){
    // code
}
二、this關(guān)鍵字
this 是執(zhí)行上下文中很重要的一個(gè)組成部分。同一個(gè)函數(shù)調(diào)用方式不同,得到的 this 值也不
2.1、普通函數(shù)情況下
function showThis(){
    console.log(this);
}

var o = {
    showThis: showThis
}

showThis(); // global
o.showThis(); // o
普通函數(shù)的 this 值由調(diào)用它所使用的引用決定。獲取函數(shù)的表達(dá)式,返回的是一個(gè) Reference 類型。Reference 類型由兩部分組成:一個(gè)對(duì)象和一個(gè)屬性值。

上面代碼里 o.showThis 產(chǎn)生的 Reference 類型,即由對(duì)象 o 和屬性showThis構(gòu)成。

調(diào)用函數(shù)時(shí)使用的引用,決定了函數(shù)執(zhí)行時(shí)刻的 this 值。

2.2、箭頭函數(shù)情況下
const showThis = () => {
    console.log(this);
}

var o = {
    showThis: showThis
}

showThis(); // global
o.showThis(); // global

改為箭頭函數(shù)后,不論用什么引用來(lái)調(diào)用它,都不影響它的 this 值。

2.3、方法情況下
// 這一個(gè)沒怎么弄明白,mark一下
class C {
    showThis() {
        console.log(this);
    }
}
var o = new C();
var showThis = o.showThis;

showThis(); // undefined
o.showThis(); // o

首先創(chuàng)建了一個(gè)類 C,并且實(shí)例化出對(duì)象 o,再把 o 的方法賦值給了變量 showThis。

三、this 關(guān)鍵字的機(jī)制

1、在 JavaScript 標(biāo)準(zhǔn)中,為函數(shù)規(guī)定了用來(lái)保存定義時(shí)上下文的私有屬性 [[Environment]]。

2、當(dāng)一個(gè)函數(shù)執(zhí)行時(shí),會(huì)創(chuàng)建一條新的執(zhí)行環(huán)境記錄,記錄的外層詞法環(huán)境(outer lexical environment)會(huì)被設(shè)置成函數(shù)的 [[Environment]]

/* 執(zhí)行上下文的切換機(jī)制 */

var a = 1;
foo();

// 在別處定義了 foo:

var b = 2;
function foo(){
    console.log(b); // 2
    console.log(a); // error
}

foo 能夠訪問 b(定義時(shí)詞法環(huán)境),卻不能訪問 a(執(zhí)行時(shí)的詞法環(huán)境)

3、JavaScript 用一個(gè) 來(lái)管理執(zhí)行上下文,這個(gè)棧中的每一項(xiàng)又包含一個(gè)鏈表。

當(dāng)函數(shù)調(diào)用時(shí),會(huì)入棧一個(gè)新的執(zhí)行上下文,函數(shù)調(diào)用結(jié)束時(shí),執(zhí)行上下文被出棧。

4、[[thisMode]] 私有屬性。

lexical:表示從上下文中找 this,這對(duì)應(yīng)了箭頭函數(shù)。

global:表示當(dāng) thisundefined 時(shí),取全局對(duì)象,對(duì)應(yīng)了普通函數(shù)。

strict:當(dāng)嚴(yán)格模式時(shí)使用,this 嚴(yán)格按照調(diào)用時(shí)傳入的值,可能為 null 或者 undefined。

"use strict"
function showThis(){
    console.log(this);
}

var o = {
    showThis: showThis
}

showThis(); // undefined
o.showThis(); // o
四、操作 this 的內(nèi)置函數(shù)
Function.prototype.callFunction.prototype.apply 可以指定函數(shù)調(diào)用時(shí)傳入的 this 值。
function foo(a, b, c){
    console.log(this);
    console.log(a, b, c);
}

//call 和 apply 作用一樣,只是傳參方式有區(qū)別
foo.call({}, 1, 2, 3); // {} 1 2 3
foo.apply({}, [1, 2, 3]); // {} 1 2 3
Function.prototype.bind 它可以生成一個(gè)綁定過(guò)的函數(shù),這個(gè)函數(shù)的 this 值固定了參數(shù)
function foo(a, b, c){
    console.log(this);
    console.log(a, b, c);
}
foo.bind({}, 1, 2, 3)(); // {} 1 2 3
個(gè)人總結(jié)

腦殼都繞暈了_(:3」∠)_,里面還是有很多不懂的,繼續(xù)努力。。。

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

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

相關(guān)文章

  • 重學(xué)前端學(xué)習(xí)筆記十九)--JavaScript中的函數(shù)

    摘要:方法在中定義的函數(shù)。這種聲明方式會(huì)定義一個(gè)生成器函數(shù),它返回一個(gè)對(duì)象。類用定義的類,實(shí)際上也是函數(shù)。調(diào)用函數(shù)時(shí)使用的引用,決定了函數(shù)執(zhí)行時(shí)刻的值。表示當(dāng)為時(shí),取全局對(duì)象,對(duì)應(yīng)了普通函數(shù)。四操作的內(nèi)置函數(shù)和可以指定函數(shù)調(diào)用時(shí)傳入的值。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要...

    LinkedME2016 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記十九)--JavaScript中的函數(shù)

    摘要:方法在中定義的函數(shù)。這種聲明方式會(huì)定義一個(gè)生成器函數(shù),它返回一個(gè)對(duì)象。類用定義的類,實(shí)際上也是函數(shù)。調(diào)用函數(shù)時(shí)使用的引用,決定了函數(shù)執(zhí)行時(shí)刻的值。表示當(dāng)為時(shí),取全局對(duì)象,對(duì)應(yīng)了普通函數(shù)。四操作的內(nèi)置函數(shù)和可以指定函數(shù)調(diào)用時(shí)傳入的值。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要...

    lcodecorex 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十九)--JavaScript中要不要加分號(hào)?

    摘要:一自動(dòng)插入分號(hào)規(guī)則三條規(guī)則要有換行符,且下一個(gè)符號(hào)是不符合語(yǔ)法的,那么就嘗試插入分號(hào)。有換行符,且語(yǔ)法中規(guī)定此處不能有換行符,那么就自動(dòng)插入分號(hào)。源代碼結(jié)束處,不能形成完整的腳本或者模塊結(jié)構(gòu),那么就自動(dòng)插入分號(hào)。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整...

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

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

0條評(píng)論

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