为何第二段JavaScript代码报错‘c未定义’,第一段却正常?
问题解答
没错,核心原因就是**var关键字导致的变量作用域差异**,具体拆解如下:
第一段代码能正常执行的原因
第一段里的c = a + b;没有用var声明,这会触发JavaScript的隐式全局变量机制:当你给一个未声明的变量赋值时,JS会自动把这个变量挂载到全局对象(浏览器环境下就是window)上,成为全局变量。
调用sum(10, 20)后,c就变成了全局可访问的变量,后续的document.write(c)自然能读取到它的值30。
第二段代码报错的原因
第二段里用var c = a + b;声明变量,var声明的变量作用域是函数级的——这个c只能在sum函数内部被访问,函数外部完全感知不到它的存在。
当你在函数外部调用document.write(c)时,JS在当前作用域和全局作用域里都找不到c变量,就会抛出“c未定义”的错误。
额外提个细节:你两段代码重复定义了sum函数,JS中函数声明会被提升,后面的函数会覆盖前面的,但这并不影响核心的作用域问题——哪怕单独运行第二段代码,结果依然是报错。
内容的提问来源于stack exchange,提问作者user23464056
相关产品推荐
相关产品推荐

