错题本:变量的作用域以及隐式转换

今天进行了一次周考,其中有两道不错的题,第一是记录一下,第二也是分享一下

第一题:变量的作用域

var x=10;
var y=20;
function f(x){
    x=x+10;
    y=x;
}
f(x);
console.log(x,y);

首先,这道题打眼一看,这不很简单吗,x=20,y=20吗。可惜,Simple Doesn't Mean Easy。

先看函数f,函数中并没有return语句,因此这个函数并没有输出。再看变量,x,y是全局变量,但是f函数内的x却是形参,是局部变量,它的作用域仅限于函数内部,出了函数就无效了,而且这个函数也没有输出,因此,x没有变化

再看y,y也还是20,哪怕你函数内对y运算了,但是值还是20.这里的y=x应该是会执行的,只不过是值没变。

over。这是一个小坑。

第二题隐式转换

document.write(!5>6);

题再次的很简单,首先分析一下,这道题输出的是!5>6的值,大于号是关系运算,返回的应该是true or false。

PS.这里还牵扯一个小问题,计算顺序问题,一般一元计算符是优先于二元计算符的,因此要先算!再算>

再来分析左边,5是数字型,而!是逻辑运算符,因此应当先把5转换为布尔型,也就是true(我认为0是false,除了0都是true)。

!true=false,所以左边现在就是就是false。现在算式变为false>6.

我觉得false与6仍旧不能运算,个人认为,关系运算的两边应该是相同的数据类型,因此我们再把false转换为数字型,false就是0,算式最终结果为0>6,返回false

这个坑有点大,也有点绕,全程都是隐式转换。

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值