在JavaScript中,当形参(函数参数)和全局变量同名时,形参的优先级高于全局变量。这是因为当函数被调用时,形参会在函数的作用域内被创建,并且这个作用域会覆盖全局作用域。
具体来说:
- 函数作用域:JavaScript中的函数在执行时会创建一个新的作用域(也称为局部作用域)。这个作用域包含了函数内部声明的所有变量、函数和形参。
- 作用域链:在JavaScript中,当查找一个变量时,会首先在当前作用域中查找。如果找不到,就会沿着作用域链向上查找,直到找到全局作用域。
- 形参和全局变量:当形参和全局变量同名时,由于形参是在函数作用域内声明的,因此它会在该作用域内被创建。当在函数内部引用这个变量时,会首先在当前作用域(即函数作用域)中查找,找到形参后就不会继续向上查找全局变量了。
以下是一个示例:
var globalVar = '我是全局变量'; function myFunction(globalVar) { console.log(globalVar); // 输出 '我是形参',而不是 '我是全局变量' } myFunction('我是形参');
在这个示例中,虽然有一个名为globalVar
的全局变量,但在myFunction
函数内部,由于形参globalVar
的存在,当调用console.log(globalVar);
时,会输出形参的值'我是形参'
,而不是全局变量的值'我是全局变量'
。
因此,形参的优先级高于全局变量。