測試題(1)

  年前的時候遇到了幾道題,還和好友語音討論到凌晨,特此記錄,寫博客一方面是分享,可是更重要的一方面是自己方便溫習,畢竟筆記不好找。


 1.
(function test() {
        var a=b=5;
        alert(typeof a);//number
        alert(typeof b);//number
        alert(a);//5
        alert(b);//5
    })();
    alert(typeof a);//undefinde
    alert(typeof b);//number
    alert(a);//not in define
    alert(b);//5

在這道題目中,前提是js是函數作用域。

首先是用自運行函數來定義了一個a,一個b。其中a,b使用連等的符號來定義的,a是var定義的一個只能在函數中調用的局部變量,但是b是全局的變量,所以說在函數中調用的a和b都是有值的都是5,並且typeof的返回值都是number。但是在函數外面的話,a是一個沒定義的,b是全局的,所以說對於b的輸出是沒有影響的,在外面要輸出a的值是會出錯的,報錯後面的代碼就無法執行了,typeof找不到所以說返回的就是undefined。這一點並不是說a的值就是undefined。

接着第二題:

var inum=0;
    for(var i=1;i<10;i++){
        if(i%5==0){
            continue;
        }
        inum++;
    }
    console.log(inum)

上面的結果是輸出的8,,這題中重要的地方就是continue。當i是5的時候inum並不會加1,會結束當前的單次循環。能讓i%5=0的就是5一個數了,所以說最後會少一次inum的加1,結果是9,要是把continue編程Break大家應該知道是怎樣的吧。結果是4.本題目應該是考察你對continue的理解,和break的區別。

接着第三題:

第三題可以分成兩大題,兩大題中又可以分成4小題。先來說第一種

   var a;
    var b=a*0;
    if(b==b){
        console.log(b*2+"2"-0+4);
    }else{
        console.log(!b*2+"2"-0+4);
    }
首先a只是進行了定義但是並沒賦值,所以說他是undefined,b的值經過計算是NAN

,NAN是不會等於NAN的就是走的else,else中!b是轉化的1 後面*2是變成了2,加上字符串2就是變成了字符串的22,後面的減0,首先是變成了數字22,後加上4 所以說結果是26.

第三題的第二種就是:

<script> var a=1;</script>
<script>  var a;
     var b=a*0;
    if(b==b){
        console.log(b*2+"2"-0+4);
    }else{
        console.log(!b*2+"2"-0+4);
    }</script>

和上面不同的是在html文件中寫了兩個script標籤。在前面的標籤中定義了a的值,後面的卻沒有,最後的結果還是6,個人理解是因爲聲明提前,他是會把所有的聲明都提前的賦值的部分我們依次執行。在這裏面a的值是1,並不是沒有定義的,b的值是0,走的是if中的,這算起來比較簡單是0+“2”-0變爲數字2,後面加上4,就是6了。

當然,如果題變成var b=a/0;啥的符號變化就可以衍生出好多題了,(注意:infinity==infinty是true,infinity的乘法自然也是infinity)。

聽着歌,寫着寫着就寫不下去了。我要去玩耍


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章