转帖:关于Hoisting & Scoping

阅读更多
提升和作用域:

Hoisting & Scoping\

Ben cherry的一篇

第一篇转帖的留言部分:
关于 Hoisting 那部分,有两点值得说明:

1. Hoisting 的作用范围是随着函数作用域的。我理解在这里尚未讲到函数作用域,不过可以提一句提醒读者注意,然后链接至作用域的部分进一步探讨;

2. “Hoisting 只对 `var` 声明的变量有效”,不尽然如此。变量声明的提升并非 hoisting 的全部,JavaScript 有四种让声明在作用域内获得提升的途径(按优先级):

-语言定义的声明,如 this 和 arguments。你不能在作用域内重新定义叫做 this 的变量,是因为 this 是语言自动定义的声明,并且它的优先级最高,也就是被 Hoisting 到最顶上了,没人能覆盖它

-形式参数。虽然我们无需用 var 来修饰形式参数,但是形式参数的确也是变量,并且被自动提升到次高的优先级

-函数声明。除了 var 以外,function declaration 也可以定义新的命名,并且同样会被 hoisting 至作用域顶部,仅次于前两者

-最后,是本文提到的常规变量,也就是 var 声明的变量

你可能感兴趣的:(转帖:关于Hoisting & Scoping)