理解hoisting(变量提升)能帮助你更好的组织你的函数作用域。
要时刻记住,变量的声明和函数定义会被提升(hoisting)到函数作用域的顶部
变量的定义(definition)不会被提升,即使你是在同一行同时声明和定义一个变量。
变量声明(declaration)是让系统知道某个变量的存在,而变量定义(definiton)是给变量赋值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| function doTheThing() { console.log(notDeclared); console.log(definedLater); var definedLater; definedLater = 'I am defined!' console.log(definedLater); console.log(definedSimulateneously); var definedSimulateneously = 'I am defined!'; console.log(definedSimulateneously); doSomethingElse(); function doSomethingElse() { console.log('I did it!'); } functionVar(); var functionVar = function() { console.log('I did it!'); }; }
|
为了使代码可读性更强,将变量的声明都直接放在函数作用域的顶部,就比较清楚变量是来自哪个作用域。
在需要使用之前,才定义(赋值)变量。
在作用域的地步定义函数,减少对代码阅读的影响
本文是js tips系列,翻译自 https://github.com/loverajoel/jstips