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

資訊專欄INFORMATION COLUMN

從兩段簡單的程序說開去

young.li / 859人閱讀

摘要:有這么兩段小程序。毫無疑問,把這兩段小程序貼到瀏覽器里跑一下,能很快地得到答案。而在第二段小程序中,由于在中,表達式的值在運行之前將會被轉化,將會把表達式和聲明提升到當前作用域的頂部。兩段小程序,考考作用域和變量聲明提升,怎么樣,答對了么

有這么兩段小程序。

var goo = "hello";
function foo(){
  if(true){
    goo = "world";
  }else {
    goo = "world";
  }
}
foo();
console.log(goo);
var goo = "hello";
function foo(){
  if(true){
    goo = "world";
  }else {
    var goo = "world";
  }
}
foo();
console.log(goo);

毫無疑問,把這兩段小程序貼到瀏覽器里跑一下,能很快地得到答案。
所以關上瀏覽器,你覺得他們的答案分別是什么,為什么?

答案

在第一段小程序中,沒有用var去聲明變量goo,這在javascript中叫隱式聲明,隱式聲明是會聲明一個全局變量的,所以 goo = "world"; 將會覆蓋之前聲明的全局變量的值。
所以第一題的答案是world。

而在第二段小程序中,由于在javascript中,var 表達式的值在運行之前將會被轉化,JavaScript將會把 var 表達式和 function 聲明提升到當前作用域的頂部。也就是說,第二段小程序其實等同于:

var goo = "hello";
function foo(){
  var goo;//var表達式提升到當前作用域的頂部
  if(true){
    goo = "world";
  }else {
    goo = "world";
  }
}
foo();
console.log(goo);

在第二段小程序中,由于條件語句的控制,也許程序永遠不會執行到 var goo = "world" 這一句,但是由于使用了var表達式,就會導致goo變量提升到當前作用域的頂部,進而使goo聲明為一個局部變量,這樣一來,局部變量賦值并不會影響全局變量,所以第二段程序顯示“hello”。

兩段小程序,考考作用域和變量聲明提升(Hoisting),怎么樣,答對了么?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85750.html

相關文章

  • 從Thread.join開去

    摘要:在進入狀態前,線程會將持有的鎖先釋放掉。被喚醒后的線程,拿不到鎖的線程將進入狀態,直到它們拿到鎖為止。在等待之后測試條件,如果條件不成立的話繼續等待,這對于確保安全性是必要的。 WAITING(TIMED_WAITING) 與 BLOCKED 看《Java特種兵》的時候發現,Thread.join可以使線程進入WAITING狀態,再結合姊妹篇線程的狀態我們可以了解到,有兩個類狀態非常接...

    incredible 評論0 收藏0
  • NIO網絡相關基礎知識

    摘要:操作系統是能夠獲取到事件操作完成的事件,基于回調函數機制和操作系統的操作控制實現事件檢測機制。 前面的文章NIO基礎知識介紹了Java NIO的一些基本的類及功能說明,Java NIO是用來替換java 傳統IO的,NIO的一些新的特性在網絡交互方面會更加的明顯。 Java 傳統IO的弊端 ????基于JVM來實現每個通道的輪詢檢查通道狀態的方法是可行的,但仍然是有問題的,檢查每個通道...

    1fe1se 評論0 收藏0
  • JavaScript深入之詞法作用域和動態作用域

    摘要:作用域作用域是指程序源代碼中定義變量的區域。采用詞法作用域,也就是靜態作用域。而與詞法作用域相對的是動態作用域,函數的作用域是在函數調用的時候才決定的。前面我們已經說了,采用的是靜態作用域,所以這個例子的結果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語言采用了動態作用域?兩者的區別又是什么?還有一個略難的思考題,快來看看吧。 作用域 作用域是指...

    gclove 評論0 收藏0

發表評論

0條評論

young.li

|高級講師

TA的文章

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