You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何函数内外执行含var name的console.log语句结果不同?

问题分析

示例1:函数作用域内的变量

function func(){
  var name
  console.log(name)
  name="pavan"
  console.log(name)
}

func()

运行结果:undefined pavan


示例2:全局作用域内的变量

var name
console.log(name)
name="pavan"
console.log(name)

运行结果:pavan pavan


差异原因

两个代码的核心差异在于变量作用域不同,以及全局作用域中name变量的特殊行为:

  1. 函数作用域的name
    在函数func内部用var name声明的变量属于局部作用域。按照JavaScript变量提升规则,var声明的变量会被提升到作用域顶部,但不会初始化,所以第一次console.log(name)时变量未赋值,输出undefined。后续赋值为"pavan"后,第二次log输出对应值。

  2. 全局作用域的name
    在浏览器环境的全局作用域中,name是浏览器内置的window.name属性(用于跨域窗口通信)。如果你的运行环境中window.name已经被预先设置为"pavan"(比如之前的代码操作或测试环境配置),此时用var name声明全局变量时,由于window.name已存在,var声明不会创建新变量,而是复用这个已有属性。因此第一次console.log(name)直接输出"pavan",后续赋值后第二次log依然输出该值。

若在标准浏览器环境中未修改过window.name,全局代码的第一次log应输出空字符串"",你给出的输出说明测试环境中window.name已被预设为"pavan",这才导致了和函数内代码的差异。

内容的提问来源于stack exchange,提问作者pavan octa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:10:20