子集IF语句错误分析:为何B错误、A无误?
问题解答
为啥选项A没错误
你觉得A里第一个if执行后difference未定义,其实是没搞明白var的变量提升机制——如果A里的difference是用var声明的,那不管if条件成不成立,这个变量的声明都会被自动“提”到当前函数作用域的最顶部。哪怕if没走进去,difference也会以undefined的状态存在,不会出现“未定义”的报错,所以A是合法的代码。
为啥选项B是错误的
如果B里的difference是用let/const在if块里声明的,那这个变量只在if的大括号内部有效,出了这个块就访问不到,外部调用的话直接会抛ReferenceError;要是B存在逻辑错误,比如当a <= b时,difference没赋值就被返回或使用,那运行结果会是undefined,不符合题目要求的逻辑正确性,这也是这类题里B错误的常见原因。
简单说,A靠var的变量提升避免了未定义报错,而B要么是块级作用域导致外部访问失败,要么是逻辑上的未赋值问题,所以B是错误选项。
内容的提问来源于stack exchange,提问作者Jingyang Zhang
相关产品推荐
相关产品推荐

