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

資訊專欄INFORMATION COLUMN

作用域鏈

zgbgx / 2004人閱讀

摘要:作用域鏈作用域就近原則在寫下聲明就能確定的,叫做詞法作用域詞法作用域可以確定是哪個,但不能確定的值關于作用域鏈,瀏覽器內(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
}

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

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

關于作用域鏈,瀏覽器內(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
}

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

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

相關文章

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

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

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

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

    gnehc 評論0 收藏0
  • 深入學習js之——作用域鏈

    摘要:開篇作用域是每種計算機語言最重要的基礎之一,因此要想深入的學習作用域和作用域鏈就是個繞不開的話題。這樣由多個執(zhí)行上下文的變量對象構成的鏈表就叫做作用域鏈。這時候執(zhí)行上下文的作用域鏈,我們命名為至此,作用域鏈創(chuàng)建完畢。 開篇 作用域是每種計算機語言最重要的基礎之一,因此要想深入的學習JavaScript,作用域和作用域鏈就是個繞不開的話題。 在《深入學習js之—-執(zhí)行上下文?!分形覀兲岬?..

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

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

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

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

    yunhao 評論0 收藏0
  • [學習筆記] JavaScript 作用域鏈

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

    ?xiaoxiao, 評論0 收藏0

發(fā)表評論

0條評論

zgbgx

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<