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

資訊專(zhuān)欄INFORMATION COLUMN

js執(zhí)行環(huán)境

zgbgx / 877人閱讀

摘要:只接受兩個(gè)參數(shù),且第二個(gè)參數(shù)必須是數(shù)組,這個(gè)數(shù)組代表原函數(shù)的參數(shù)列表。即繼承原函數(shù)的原型將這個(gè)新對(duì)象綁定到此函數(shù)的上。全局執(zhí)行環(huán)境執(zhí)行環(huán)境執(zhí)行環(huán)境閉包函數(shù)作為返回值,函數(shù)作為參數(shù)傳遞。

提升

1 變量提升

console.log(a);
var a = 1;

2 函數(shù)表達(dá)式

函數(shù)表達(dá)式的提升 === 變量提升

a(); 
var a = function(){...};

3 函數(shù)聲明

func();
function func(){ console.log(1); }
var func = function(){ console.log(2); }
func();

TEST

function func(){
    a = 1;
    console.log(window.a);  //  ?
    console.log(a);         //  ?
    var a = 2;
    console.log(a);         //  ?
}
func();
this

TEST

var people = {
    Name: "a",
    getName : function(){
        console.log(this.Name);
    }
};
var bar = people.getName;

bar();
var people = {
    Name: "a",
    getName : function(){
        console.log(this.Name);
    }
};
people.getName();

1 默認(rèn)綁定

var name = "b";
var a = {
    name: "a",
    getName: function() {
        console.log(this.name);
    }
}
var obj = a.getName;
obj(); // ?

2 隱性綁定

var name = "b";
var a = {
    name: "a",
    getName: function() {
        console.log(this.name);
    }
}
var obj = a.getName();
obj; // ?

3 強(qiáng)制綁定

call apply bind 區(qū)別

call從第二個(gè)參數(shù)開(kāi)始所有的參數(shù)都是 原函數(shù)的參數(shù)。

apply只接受兩個(gè)參數(shù),且第二個(gè)參數(shù)必須是數(shù)組,這個(gè)數(shù)組代表原函數(shù)的參數(shù)列表。

bind只有一個(gè)函數(shù),且不會(huì)立刻執(zhí)行,只是將一個(gè)值綁定到函數(shù)的this上,并將綁定好的函數(shù)返回。

var name = "b";
var a = {
    name: "a",
    getName: function() {
        console.log(this.name);
    }
}
a.getName.call(this);
var name = "b";
var a = {
    name: "a",
    getName: function() {
        console.log(this.name);
    }
}
var func = a.getName.bind(this);
func();

4 New綁定

創(chuàng)建一個(gè)新對(duì)象。

把這個(gè)新對(duì)象的__proto__屬性指向原函數(shù)的prototype屬性。(即繼承原函數(shù)的原型)

將這個(gè)新對(duì)象綁定到 此函數(shù)的this上 。

返回新對(duì)象,如果這個(gè)函數(shù)沒(méi)有返回其他對(duì)象。

var name = "b";
function func() {
    this.name = "a";
    console.log(this.name);
}
var obj = new func();
obj; // ?

5 箭頭函數(shù)

在定義時(shí)綁定this

this無(wú)法修改

var name = "b";
var people = {
    name: "a",
    getName : function() {
        return () => {
            console.log(this.name);
        }
    }
};
var bar = people.getName();

bar();

TEST

function foo(arg){
    this.a = arg;
    return this
};

var a = foo(1);
var b = foo(2);

console.log(a.a);    // ?
console.log(b.a);    // ?
var x = 1;
var obj = {
    x: 2,
    f: function(){ console.log(this.x); }
};
var bar = obj.f;
var obj2 = {
    x: 3,
    f: obj.f
}
obj.f();
bar();
obj2.f();
function obj() {
    getName = function () { console.log (1); };
    return this;
}
obj.getName = function () { console.log(2);};
obj.prototype.getName = function () { console.log(3);};
var getName = function () { console.log(4);};
function getName () { console.log(5);}
 
obj.getName ();                // ?
getName ();                    // ?
obj().getName ();              // ?
getName ();                    // ?
new obj.getName ();            // ?
new obj().getName ();          // ?
new new obj().getName ();      // ?
執(zhí)行環(huán)境&作用域

變量、函數(shù)表達(dá)式——變量聲明,默認(rèn)賦值為undefined;

this——賦值;

函數(shù)聲明——賦值;

這三種數(shù)據(jù)的準(zhǔn)備情況我們稱之為“執(zhí)行上下文”或者“執(zhí)行上下文環(huán)境”。

作用域在函數(shù)定義時(shí)就已經(jīng)確定了。而不是在函數(shù)調(diào)用時(shí)確定。

var a = 10;
function fn() {
    console.log(a);
}
function bar(f) {
    var a = 20;
    f()
}
bar(fn);

1 全局執(zhí)行環(huán)境
2 fn執(zhí)行環(huán)境
3 bar執(zhí)行環(huán)境

var a = 10;               // 1
var b = 200;    
function fn() {     
    var b = 20;
    function bar() { 
        console.log(a + b);
    }
    bar();                 // 3
}
fn();                    // 2
var a = 10;               // 1
var b = 200;    
function fn() {     
    var b = 20;
    function bar() { 
        console.log(this.a + this.b);
    }
    bar();                 // 3
}
fn();                    // 2
閉包

函數(shù)作為返回值,函數(shù)作為參數(shù)傳遞。

function fn () {
    var max = 10;
    return function bar(x) {
        if (x > max) {
            console.log(x);
        }
    }
}
var f1 = fn();
var max = 100;
f1(15);

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

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

相關(guān)文章

  • [譯]了解Javascript中的執(zhí)行上下文和執(zhí)行堆棧

    摘要:理解執(zhí)行上下文和執(zhí)行堆棧對(duì)于理解的其它概念如提升,范圍和閉包至關(guān)重要。正確地理解執(zhí)行上下文和執(zhí)行堆棧將幫助你更好地使用開(kāi)發(fā)應(yīng)用。引擎執(zhí)行位于執(zhí)行堆棧頂部的方法。當(dāng)調(diào)用時(shí),為該函數(shù)創(chuàng)建一個(gè)新的執(zhí)行上下文,并且把它推入到當(dāng)前執(zhí)行堆棧。 By Sukhjinder Arora | Aug 28, 2018 原文 如果你是或者你想要成為一名js開(kāi)發(fā)者,那么你必須了解js程序內(nèi)部的運(yùn)作。理解執(zhí)行...

    qujian 評(píng)論0 收藏0
  • JS基礎(chǔ)知識(shí):變量對(duì)象、作用域鏈和閉包

    摘要:前言這段時(shí)間一直在消化作用域鏈和閉包的相關(guān)知識(shí)。而作用域鏈則是這套規(guī)則這套規(guī)則的具體運(yùn)行。是變量對(duì)象的縮寫(xiě)那這樣放有什么好處呢我們知道作用域鏈保證了當(dāng)前執(zhí)行環(huán)境對(duì)符合訪問(wèn)權(quán)限的變量和函數(shù)的有序訪問(wèn)。 前言:這段時(shí)間一直在消化作用域鏈和閉包的相關(guān)知識(shí)。之前看《JS高程》和一些技術(shù)博客,對(duì)于這些概念的論述多多少少不太清楚或者不太完整,包括一些大神的技術(shù)文章。這也給我的學(xué)習(xí)上造成了一些困惑,...

    Keven 評(píng)論0 收藏0
  • javascript執(zhí)行細(xì)節(jié)分析

    摘要:此時(shí)執(zhí)行環(huán)境棧中有兩個(gè)執(zhí)行環(huán)境,分別是全局執(zhí)行環(huán)境和函數(shù)執(zhí)行環(huán)境,的執(zhí)行環(huán)境在棧頂,全局執(zhí)行環(huán)境在棧的底部。所以執(zhí)行結(jié)果轉(zhuǎn)載 深入理解JS執(zhí)行細(xì)節(jié) Javascript從定義到執(zhí)行,JS引擎在實(shí)現(xiàn)層做了很多初始化工作,因此在學(xué)習(xí)JS引擎工作機(jī)制之前,我們需要引入幾個(gè)相關(guān)的概念:執(zhí)行環(huán)境棧、全局對(duì)象、執(zhí)行環(huán)境、變量對(duì)象、活動(dòng)對(duì)象、作用域和作用域鏈等,這些概念正是JS引擎工作的核心組件。這...

    Yang_River 評(píng)論0 收藏0
  • js經(jīng)典面試題--變量提升、執(zhí)行環(huán)境、作用域鏈

    摘要:經(jīng)典面試題變量提升執(zhí)行環(huán)境作用域鏈今天記錄一個(gè)的經(jīng)典面試題,該編程題涉及到了的變量提升執(zhí)行環(huán)境作用域鏈問(wèn)題。這樣,一致延續(xù)到全局執(zhí)行環(huán)境全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈中的最后一個(gè)對(duì)象。 js經(jīng)典面試題--變量提升、執(zhí)行環(huán)境、作用域鏈 今天記錄一個(gè)js的經(jīng)典面試題,該編程題涉及到了js的變量提升、執(zhí)行環(huán)境、作用域鏈問(wèn)題。 1、變量提升js沒(méi)有塊級(jí)作用域,使用var聲明的變量會(huì)自動(dòng)...

    EscapedDog 評(píng)論0 收藏0
  • 從底層看JS執(zhí)行機(jī)制

    摘要:作用域鏈用于表明上下文的執(zhí)行順序。當(dāng)前上下文執(zhí)行完畢則出棧,執(zhí)行下一個(gè)上下文。 從一個(gè)簡(jiǎn)單的例子出發(fā) 先從一個(gè)簡(jiǎn)單的例子出發(fā)(先不涉及異步),看看自己是否大致了解瀏覽器的執(zhí)行機(jī)制: console.log(a); var a=1; function foo(a){ console.log(a); var a=2; console.log(a); } foo(a)...

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

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

0條評(píng)論

zgbgx

|高級(jí)講師

TA的文章

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