年前的時候遇到了幾道題,還和好友語音討論到凌晨,特此記錄,寫博客一方面是分享,可是更重要的一方面是自己方便溫習,畢竟筆記不好找。
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)。
聽着歌,寫着寫着就寫不下去了。我要去玩耍