摘要:有這么兩段小程序。毫無疑問,把這兩段小程序貼到瀏覽器里跑一下,能很快地得到答案。而在第二段小程序中,由于在中,表達式的值在運行之前將會被轉化,將會把表達式和聲明提升到當前作用域的頂部。兩段小程序,考考作用域和變量聲明提升,怎么樣,答對了么
有這么兩段小程序。
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
摘要:在進入狀態前,線程會將持有的鎖先釋放掉。被喚醒后的線程,拿不到鎖的線程將進入狀態,直到它們拿到鎖為止。在等待之后測試條件,如果條件不成立的話繼續等待,這對于確保安全性是必要的。 WAITING(TIMED_WAITING) 與 BLOCKED 看《Java特種兵》的時候發現,Thread.join可以使線程進入WAITING狀態,再結合姊妹篇線程的狀態我們可以了解到,有兩個類狀態非常接...
摘要:操作系統是能夠獲取到事件操作完成的事件,基于回調函數機制和操作系統的操作控制實現事件檢測機制。 前面的文章NIO基礎知識介紹了Java NIO的一些基本的類及功能說明,Java NIO是用來替換java 傳統IO的,NIO的一些新的特性在網絡交互方面會更加的明顯。 Java 傳統IO的弊端 ????基于JVM來實現每個通道的輪詢檢查通道狀態的方法是可行的,但仍然是有問題的,檢查每個通道...
摘要:作用域作用域是指程序源代碼中定義變量的區域。采用詞法作用域,也就是靜態作用域。而與詞法作用域相對的是動態作用域,函數的作用域是在函數調用的時候才決定的。前面我們已經說了,采用的是靜態作用域,所以這個例子的結果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語言采用了動態作用域?兩者的區別又是什么?還有一個略難的思考題,快來看看吧。 作用域 作用域是指...
閱讀 1258·2021-11-19 09:40
閱讀 3117·2021-11-02 14:47
閱讀 3050·2021-10-11 10:58
閱讀 3217·2019-08-30 15:54
閱讀 2666·2019-08-30 12:50
閱讀 1721·2019-08-29 16:54
閱讀 462·2019-08-29 15:38
閱讀 1237·2019-08-29 15:19