年前的时候遇到了几道题,还和好友语音讨论到凌晨,特此记录,写博客一方面是分享,可是更重要的一方面是自己方便温习,毕竟笔记不好找。
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)。
听着歌,写着写着就写不下去了。我要去玩耍