国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript 變量作用域 兩個可能會被忽略的小特性

2024-05-06 14:10:51
字體:
來源:轉載
供稿:網友
也許有些高手早已知道了,但是我覺得這兩個東西還是有一些價值的,所以拿到這里和大家分享一下吧
. 有如下代碼:
代碼如下:
<script type="text/javascript" >
function test() {
with (location) {
var temp = "an url";
}
alert(temp);
}
test();
</script>

    調用這個函數會輸出什么呢? 也許會認為它會彈出undefined, 但實際上,它彈出的是"an url"這個字符串,這就涉及到JavaScript中變量作用域的一個概念。
JS中,每個作用域都有一個相應的"變量對象"(這么叫不一定準確,知道有這么個東西就行了),這里面存放著當前作用域定義的標識符。JS程序開始的時候,會進入全局作用域, 在我們的程序中,因為全局作用域中定義了test函數,所以它這里的“變量對象”就存放了test函數的標識符。接下來,我們調用了test函數,就進入了,test函數的作用域,test函數本身的作用域也有自己的"變量對象",進入test的作用域的時候,也會把全局作用域里存放的標識符復制進來,所以,在test函數中就可以訪問全局作用域中定義的標識符了,但是在外層作用域,是不能看到內層的內容的。如果這樣的話,那我們這里的alert(temp)就會輸出undefined,因為temp是在內層作用域定義的。但是為什么在這里卻能夠找到在內層作用域里定義的標識符呢?
    因為with語句塊中作用域的"變量對象" 是只讀的,所以在他本層定義的標識符,不能存儲到本層,而是存儲到它的上一層作用域,也就是test函數的作用域,所以,我們的alert(temp)這條語句,就可以訪問到那個在內層定義的temp變量了。同樣的情形還出現在try catch 語句里面。
.Javascript中沒有語句塊的概念,代碼如下:
代碼如下:
if (true) {
var temp = "oh";
}
alert(temp);

    很簡單的幾行代碼,如果是按照通常的程序語言經驗,我們會認為alert語句會報錯,然而事實并不是這樣,alert語句正常的輸出了“oh” 這個字符串,所以在
Javascript中不存在語句塊的概念。
    上面兩個示例都很簡單,也許并不是多高的技術,很多高手應該早已了解,但是這兩個語言特性應該還是比較有用的,也許了解這些特性后,在寫JS的時候會減少一些出錯的機會,所以還是發上來和大家分享一下,希望能夠對大家寫JS的時候幫助。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 巫溪县| 自治县| 成武县| 团风县| 丁青县| 忻州市| 徐闻县| 美姑县| 自治县| 绥中县| 镇原县| 德江县| 翁源县| 太仓市| 漳浦县| 屯门区| 长兴县| 沙湾县| 伊金霍洛旗| 平度市| 宁蒗| 江阴市| 巧家县| 库车县| 濮阳县| 察雅县| 电白县| 三门县| 泊头市| 江孜县| 茌平县| 齐齐哈尔市| 镇沅| 光山县| 牙克石市| 沧州市| 白河县| 曲周县| 冀州市| 石台县| 聂拉木县|