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

首頁 > 語言 > JavaScript > 正文

一個(gè)JavaScript變量聲明的知識(shí)點(diǎn)

2024-05-06 15:53:40
字體:
供稿:網(wǎng)友
JavaScript變量聲明很簡(jiǎn)單,但是這里也有要學(xué)習(xí)的知識(shí)點(diǎn),對(duì)于JavaScript基礎(chǔ)學(xué)習(xí)很重要。

上周四吃完午飯,leader發(fā)了一道JavaScript的題目給我們做,我們Team里面有做前端的,有做后臺(tái)的,也有坐mobile web的,所以大家對(duì)題目的理解各自都不一樣,然后在QQ討論組里面進(jìn)行討論。發(fā)現(xiàn)雖然很基礎(chǔ),但是通過討論收獲不少,分享出來。當(dāng)然在有開發(fā)經(jīng)驗(yàn)的開發(fā)者看來,這些都是學(xué)習(xí)JavaScript最基礎(chǔ)的東西。因?yàn)槠綍r(shí)都是用jQuery或者第三JS組件,所以對(duì)JavaScript基礎(chǔ)學(xué)習(xí)不夠重視。題目如下,問題是:2次alert分別輸出什么結(jié)果?

復(fù)制代碼 代碼如下:


<script
type="text/javascript">
    var a = 1;
    var a;
    alert(typeof a);

    (function () {
        b = '-----';
        var b;       
    })();
    alert( typeof b);
</script>


我的答案是:1.undefined 2.undefined。然后leader讓我們?cè)僮屑?xì)考慮一下問題答案。我對(duì)題目的分析:
1.聲明a并賦值為1,然后用重新聲明a,但是此時(shí)沒有賦值,那變量默認(rèn)值應(yīng)該為undefined。
2.b變量是在函數(shù)里面是局部變量,alert里面輸出的是全局變量b,所以為undefiend。
我自己在Chrome里面運(yùn)行了一下代碼,代碼正確結(jié)果是1.number 2.undefined。這里考察的是JavaScript的變量聲明提前概念。
我們?cè)诳戳硗庖粋€(gè)例子,比如下面:

復(fù)制代碼 代碼如下:


test();

function test(){
    alert("Hello World!");
}


程序不會(huì)報(bào)錯(cuò),而已運(yùn)行結(jié)果是:Hello World!。原理:計(jì)算機(jī)在開始執(zhí)行語句之前,會(huì)先查找所有的function定義,然后保存相關(guān)的function。
第1題:
var a = 1;
var a;
第2行聲明變量a,就相當(dāng)于在頂部聲明了a,然后第一句是重新聲明a,然后賦值為1。所以typeof a為number
第2題:
b = '-----';
var b;
第二題解析:b=‘-----',程序首先會(huì)去查找上下文是否有變量b的聲明,如果有的話,直接賦值為'-----'。但是alert( typeof b); 是在函數(shù)外面,輸出的全局變量b,所有是undefined。
請(qǐng)注意:對(duì)變量的賦值操作并沒有提前。
接著看如下代碼段:

復(fù)制代碼 代碼如下:


<script type="text/javascript">
name="aaa";
function test(){
    alert(typeof name);

    var;
    alert(typeof name);
}
test();
</script>


請(qǐng)寫出結(jié)果。
分析可以寫成如下代碼段:

復(fù)制代碼 代碼如下:


name="aaa";
function test(){
    alert(typeof name);//在函數(shù)內(nèi)部查找上下文是否有name的聲明,有聲明。但是賦值操作不能提前,所以類型為undefined
    var;//賦值操作
    alert(typeof name);//string
}
test();


但是下面代碼段,運(yùn)行結(jié)果是什么?

復(fù)制代碼 代碼如下:


<script type="text/javascript">
alert(typeof name);
var;
alert(typeof name);
</script>


程序運(yùn)行結(jié)果是:string,string。這里就弄暈了,不知道怎么分析和解釋了。表明上我覺得我理解了變量聲明提前,但是用學(xué)到方法分析上面代碼段,我會(huì)得出錯(cuò)誤的結(jié)果。那么變量的賦值和在函數(shù)外部(全局變量)還是函數(shù)內(nèi)部(局部變量)有關(guān)系?

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 青神县| 双柏县| 鄂温| 锦州市| 麻江县| 古浪县| 措美县| 西峡县| 上思县| 巍山| 都江堰市| 仲巴县| 铁岭市| 昌乐县| 赫章县| 嘉黎县| 山阳县| 延长县| 乐山市| 禹州市| 许昌县| 芦山县| 永春县| 博客| 奉节县| 仪征市| 遵义市| 大化| 牡丹江市| 太和县| 西林县| 剑川县| 石河子市| 金阳县| 廉江市| 哈密市| 普安县| 乌拉特前旗| 华蓥市| 浦县| 朝阳市|