变量的顺序

本文深入探讨JavaScript中变量声明及赋值的优先级问题,包括局部变量与全局变量的冲突解决,形参与局部变量之间的优先级关系等,帮助读者理解JavaScript引擎如何处理这些复杂情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到上面的代码,如果清楚全局变量和局部变量的或许都会说,输出1,1,但事实真是这样的吗?COPY出来到浏览器中运行一下,你会发现,第一次alert居然是undefined。。。这是为什么 ?真相呢?真相在哪时在???

让我们翻开这篇博客看一下。。。http://www.cnblogs.com/snandy/archive/2011/03/11/1980399.html ,作者的标题是JavaScript中同名标识符优先级

一,局部变量先使用后声明,不影响外部同名变量(代码略,就是我上面那一段 )

第一点,函数fn内第一句输出x,x是在第二句才定义的。这在JS中是允许的,这里的允许是指不会出现语法错误程序可以运行。
但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如

Java中编译器会提示错误,程序无法运行。
第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefined。

二,形参优先级高于函数名

可以看到函数名和形参同名都是fn,输出的是字符串"hello",却不是函数fn的函数体(fn.toString())。

三,形参优先级高于arguments

arguments对象可以直接在函数内使用,是语言本身提供的一个 特殊标识符
这里刚好将形参声明成与其同名。输出可以看到是"hello"而非"[object Object]",即形参arguments覆盖了语言本身提供的真正的arguments。

四,形参优先级高于只声明却未赋值的局部变量

函数fn形参为a,函数内第一句仅声明局部变量a,却并未赋值。从输出结果是"hello"而非undefined可以看出形参a优先级高于仅声明却未赋值的局部变量a。

五,声明且赋值的局部变量优先级高于形参

函数fn形参为a,函数内第一句仅声明局部变量a,赋值为1。从输出结果是"1"而非"hello"可以看出声明且赋值的局部变量a优先级高于形参a。

六,形参赋值给同名局部变量时

暂不运行,猜测下结果。如果按照第五点:声明且赋值的局部变量优先级高于形参。那么a将是undefined。但实际上a是"hello",即右a是形参a,左a才是局部变量a。

大小: 13.82 K
尺寸: 454 x 96
浏览: 7 次
点击打开新窗口浏览全图

这里的两个a互不干扰,谁也没覆盖谁。这与刚刚说的赋值的局部变量优先级高于形参又矛盾了。但引擎这样做的确是我们想要的,因为并不希望var a = a后a是undefined。

---EOF---
看了上面的内容,你懂了多少?

 

### Python 环境变量添加顺序对程序运行的影响 当配置环境变量时,路径的顺序至关重要。如果调整环境变量后 `where python` 的命令结果显示顺序未改变,则可能是因为环境变量设置尚未生效[^1]。 #### 路径解析机制 操作系统按照 PATH 变量中的目录列表依次查找可执行文件。这意味着第一个匹配到的同名文件会被优先调用。因此,在多个版本共存的情况下: - 如果希望特定版本被默认使用,应将其安装路径放置在其他版本之前 - 新增或修改后的环境变量需通过重启终端会话使其生效 #### 实际影响案例分析 假设存在两个不同版本的 Python 安装位置分别为: - C:\Python39\ (较新版本) - C:\Python27\ (旧版) 若期望优先启动 Python 3.x 版本,则应在系统环境变量中将前者置于后者前面。反之则可能导致即使已正确设置了新的 Python 版本路径,但在命令提示符下输入 `python` 后仍然打开的是较低版本解释器的情况[^3]。 ```bash echo %PATH% C:\Windows\system32;...;C:\Python39\Scripts\;C:\Python39\;... ``` 上述示例展示了如何查看当前系统的 PATH 设置,并确认 Python 3.9 是否位于更早的位置以确保其成为首选项。 为了验证更改是否成功以及理解具体影响范围,可以尝试以下测试方法: 1. 使用 `where python` 查看所有可用的 Python 执行文件及其加载次序; 2. 输入 `python --version` 来检验实际使用的 Python 解释器版本; 这些操作有助于诊断并解决因路径排列不当引起的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值