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

資訊專欄INFORMATION COLUMN

作用域鏈

zgbgx / 1999人閱讀

摘要:作用域鏈作用域就近原則在寫下聲明就能確定的,叫做詞法作用域詞法作用域可以確定是哪個(gè),但不能確定的值關(guān)于作用域鏈,瀏覽器內(nèi)部究竟發(fā)生了什么例子聲明前置調(diào)用調(diào)用例子聲明前置調(diào)用調(diào)用例子聲明前置調(diào)用調(diào)用例子,,,,,,聲明前置調(diào)用調(diào)用調(diào)用

作用域鏈

作用域:就近原則
在寫下聲明就能確定的,叫做詞法作用域

var a = 1
function bar(){
  var a = 2
  console.log(a)    //2
}

詞法作用域可以確定是哪個(gè)a,但不能確定a的值

var a
function foo(){
  var a = 1
  bar()
}
function bar(){
  console.log(a)    //100
}
a = 100
foo()

關(guān)于作用域鏈,瀏覽器內(nèi)部究竟發(fā)生了什么:
例子1:

var x = 10
bar() 
function foo() {
  console.log(x)    //10
}
function bar(){
  var x = 30
  foo()
}

1. 聲明前置
globalContext = {
  AO:{
    x:10,
    foo:function(){},
    bar:function(){}
  },
  Scope:null
}
foo.[[scope]] = globalContext.AO
bar.[[scope]] = globalContext.AO

2. 調(diào)用 bar
barContext = {
  AO:{
    x:30
  }
  Scope:bar.[[scope]] = globalContext.AO
}

3. 調(diào)用 foo
fooContext = {
  AO:{}
  Scope:foo.[[scope]] = globalContext.AO
}

例子2:

var x = 10;
bar() 
function bar(){
  var x = 30;
  function foo(){
    console.log(x) //30
  }
  foo();
}

1. 聲明前置
globalContext = {
  AO:{
    x:10
    bar:function
  }
  Scope:null
}
bar.[[scope]] = globaleContext.AO

2. 調(diào)用 bar
barContext = {
  AO:{
    x:30
    foo:function
  }
  Scope:bar.[[scope]] = globaleContext.AO
}
foo.[[scope]] = barContext.AO

3. 調(diào)用 foo
fooContext = {
  AO:{}
  Scope:foo.[[scope]] = barContext.AO
}

例子3:

var x = 10;
bar() 
function bar(){
  var x = 30;
  (function (){
    console.log(x)    //30
  })()
}

1. 聲明前置
globalContext = {
  AO:{
    x:10
    bar:function
  }
  Scope:null
}
bar.[[scope]] = globalContext.AO

2. 調(diào)用 bar
barContext = {
  AO:{
    x:30
      function
  }
  Scope:bar.[[scope]] = globalContext.AO
}
function.[[scope]] = barContext.AO

3. 調(diào)用 function
functionContext = {
  AO:{}
  Scope:function.[[scope]] = barContext.AO
}

例子4:

var a = 1;
function fn(){
  console.log(a)    //1,undefined
  var a = 5
  console.log(a)    //2,5
  a++
  var a
  fn3()
  fn2()
  console.log(a)    //5,20
  function fn2(){
    console.log(a)    //4,6
    a = 20
  }
}
function fn3(){
  console.log(a)    //3,1
  a = 200
}
fn()
console.log(a)        //6,200

1. 聲明前置
globalContext = {
  AO:{
    a:200
    fn:function
    fn3:function
  }
  Scope:null
}
fn.[[scope]] = globalContext.AO
fn3.[[scope]] = globalContext.AO

2. 調(diào)用 fn
fnContext = {
  AO:{
    a:20
    fn2:funcion
  }
  Scope:fn.[[scope]] = globalContext.AO
}
fn2.[[scope]] = fnContext.AO

3. 調(diào)用 fn3
fn3Context = {
  AO:{}
  Scope:fn3.[[scope]] = globalContext.AO
}

4. 調(diào)用 fn2
fn2Context = {
  AO:{}
  Scope:fn2.[[scope]] = fnContext.AO
}

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

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

相關(guān)文章

  • 理解JavaScript中的作用域和作用域鏈

    摘要:示例當(dāng)一個(gè)函數(shù)創(chuàng)建后,它的作用域鏈會(huì)被創(chuàng)建此函數(shù)的作用域中可訪問的數(shù)據(jù)對(duì)象填充。每一個(gè)運(yùn)行期上下文都和一個(gè)作用域鏈關(guān)聯(lián)。此時(shí),作用域鏈中函數(shù)的所有局部變量所在的作用域?qū)ο髸?huì)被推后,訪問代價(jià)變高了。 作用域 作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生命周期。在JavaScript中,變量的作用域有全局作用域和局部作用域兩種。 作用域鏈 函數(shù)對(duì)象有一個(gè)內(nèi)部屬性[...

    XanaHopper 評(píng)論0 收藏0
  • 20170525-執(zhí)行環(huán)境、作用域鏈作用

    摘要:當(dāng)執(zhí)行流進(jìn)入一個(gè)函數(shù)時(shí),函數(shù)的環(huán)境就會(huì)被推入一個(gè)環(huán)境棧中。在函數(shù)執(zhí)行完后,棧將其環(huán)境彈出,把控制權(quán)返回給之前的執(zhí)行環(huán)境。執(zhí)行環(huán)境可以分為創(chuàng)建執(zhí)行銷毀三個(gè)階段。在這個(gè)階段,作用域鏈會(huì)被初始化,的值也會(huì)被最終確定。 執(zhí)行環(huán)境 執(zhí)行環(huán)境中定義了變量和函數(shù)有權(quán)訪問的其他數(shù)據(jù),決定了他們各自的行為。 當(dāng)JavaScript解釋器初始化執(zhí)行代碼時(shí),它首先默認(rèn)進(jìn)入全局執(zhí)行環(huán)境,從此刻開始,函數(shù)的每...

    gnehc 評(píng)論0 收藏0
  • 深入學(xué)習(xí)js之——作用域鏈

    摘要:開篇作用域是每種計(jì)算機(jī)語(yǔ)言最重要的基礎(chǔ)之一,因此要想深入的學(xué)習(xí)作用域和作用域鏈就是個(gè)繞不開的話題。這樣由多個(gè)執(zhí)行上下文的變量對(duì)象構(gòu)成的鏈表就叫做作用域鏈。這時(shí)候執(zhí)行上下文的作用域鏈,我們命名為至此,作用域鏈創(chuàng)建完畢。 開篇 作用域是每種計(jì)算機(jī)語(yǔ)言最重要的基礎(chǔ)之一,因此要想深入的學(xué)習(xí)JavaScript,作用域和作用域鏈就是個(gè)繞不開的話題。 在《深入學(xué)習(xí)js之—-執(zhí)行上下文棧》中我們提到...

    lemanli 評(píng)論0 收藏0
  • 形象化模擬作用域鏈,深入理解js作用域、閉包

    摘要:至此作用域鏈創(chuàng)建完畢。好了,通過深入理解作用域鏈,我們能跟好的理解的運(yùn)行機(jī)制和閉包的原理。 前言 理解javascript中的作用域和作用域鏈對(duì)我們理解js這們語(yǔ)言。這次想深入的聊下關(guān)于js執(zhí)行的內(nèi)部機(jī)制,主要討論下,作用域,作用域鏈,閉包的概念。為了更好的理解這些東西,我模擬了當(dāng)一個(gè)函數(shù)執(zhí)行時(shí),js引擎做了哪些事情--那些我們看不見的動(dòng)作。 關(guān)鍵詞: 執(zhí)行環(huán)境 作用域 作用域鏈 變...

    txgcwm 評(píng)論0 收藏0
  • JS 執(zhí)行上下文棧 / 作用域鏈

    摘要:每一個(gè)執(zhí)行上下文可以訪問的對(duì)象包括自身的作用域和父執(zhí)行上下文的作用域和父父執(zhí)行上下文作用域直到全局作用域,這就產(chǎn)生了作用域鏈。語(yǔ)句結(jié)束后,作用域鏈恢復(fù)正常。 0、自己理解 代碼執(zhí)行或函數(shù)調(diào)用生成執(zhí)行上下文(只有當(dāng)前執(zhí)行上下文有執(zhí)行權(quán)),該執(zhí)行上下文內(nèi)只能訪問當(dāng)前執(zhí)行上下文的變量、函數(shù)和上一級(jí)執(zhí)行上下文中的變量、函數(shù),激活下一個(gè)執(zhí)行上下文的時(shí)候執(zhí)行權(quán)轉(zhuǎn)移到新的執(zhí)行上下文,形成執(zhí)行上下文棧...

    yunhao 評(píng)論0 收藏0
  • [學(xué)習(xí)筆記] JavaScript 作用域鏈

    摘要:全局執(zhí)行環(huán)境的變量對(duì)象始終是作用域鏈中的最后一個(gè)變量對(duì)象。綜上,每個(gè)函數(shù)對(duì)應(yīng)一個(gè)執(zhí)行環(huán)境,每個(gè)執(zhí)行環(huán)境對(duì)應(yīng)一個(gè)變量對(duì)象,而多個(gè)變量對(duì)象構(gòu)成了作用域鏈,如果當(dāng)前執(zhí)行環(huán)境是函數(shù),那么其活動(dòng)對(duì)象在作用域鏈的前端。 1.幾個(gè)概念 先說幾個(gè)概念:函數(shù)、執(zhí)行環(huán)境、變量對(duì)象、作用域鏈、活動(dòng)對(duì)象。這幾個(gè)東東之間有什么關(guān)系呢,往下看~ 函數(shù) 函數(shù)大家都知道,我想說的是,js中,在函數(shù)內(nèi)部有兩個(gè)特殊...

    ?xiaoxiao, 評(píng)論0 收藏0

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

0條評(píng)論

zgbgx

|高級(jí)講師

TA的文章

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