请教alert()函数在变量赋值语句中的执行机制
JavaScript中alert()在变量语句中执行的机制解释
先看你给出的代码:
var a = 'hello'-alert('hi'); // a is Not-a-Number and pops up 'hi' var b = 'world';-alert('ok'); // b is 'world' and pops up 'ok'
核心逻辑拆解如下:
alert()的本质特性
alert()是一个带副作用的函数——执行时一定会弹出提示框,而且它的返回值永远是undefined。只要JS引擎需要计算它的返回值,就会先执行这个函数,触发弹窗。两段代码的具体执行流程
第一段代码:
var a = 'hello'-alert('hi')
JS中减法运算符-需要先计算左右两边的操作数。所以引擎会优先执行alert('hi'),弹出'hi'并得到返回值undefined。接下来计算'hello' - undefined:字符串'hello'转数字会变成NaN,undefined转数字也是NaN,NaN - NaN的结果还是NaN,因此变量a最终为NaN。第二段代码:
var b = 'world';-alert('ok')
这里的分号是语句结束标记,var b = 'world'是完整的赋值语句,执行后b的值就是'world'。后面的-alert('ok')是独立的一元表达式:引擎先执行alert('ok')弹出提示框,得到返回值undefined,再对这个值做一元负号运算(结果为NaN),但这个结果没有赋值给任何变量,所以b的值不受影响。
内容的提问来源于stack exchange,提问作者Sayed Salehin
相关产品推荐
相关产品推荐

