举个荔枝:
function test() {
a = 5;
console.log(a);
console.log(global.a); // node 环境
var a = 10;
console.log(a);
}
test();
输出结果:
5
undefined
10
再举个荔枝:
function test2() {
function a() {}
var a;
console.log(a); //打印出a的函数体
var b;
function b() {}
console.log(b); //打印出b的函数体
// !注意看,一旦变量被赋值后,将会输出变量
var c = 12
function c() {}
console.log(c); //12
function d() {}
var d = 12
console.log(d); //12
}
test2();
输出结果:
[Function: a]
[Function: b]
12
12
总结:变量解析的顺序
一般情况下,会按照最开始说的四种方式依次解析
- 语言内置
- 形式参数
- 函数声明
- 变量声明
也有例外:
- 内置的名称arguments表现得很奇怪,看起来应该是声明在形参之后,但是却在声明之前。这是说,如果形参里面有arguments,它会比内置的那个优先级高。所以尽可能不要在形参里面使用arguments;
- 在任何地方定义this变量都会出语法错误
- 如果多个形式参数拥有相同的名称,最后的那个优先级高,即便是实际运行的时候它的值是undefined;
网友评论