
1 ipwx 2018 年 11 月 22 日 用 let 不要用 var |
2 morethansean 2018 年 11 月 22 日 via Android 变量提升。任何一个基础教程都会讲吧感觉? |
3 LancerComet 2018 年 11 月 22 日 var a = 1 function foo () { var a = undefined if (false) { a = 2 } console.log('a:', a) } foo() |
4 rabbbit 2018 年 11 月 22 日 js 在进入函数时时会把 var 声明的变量提升到顶部 function 中的所有 var 变量, function 声明的函数, 传进来的参数都会绑定到一个 Environment Record 上 执行函数内部代码前,有一步叫 Declaration Binding Instantiation http://ecma-international.org/ecma-262/5.1/#sec-10.5 注意步骤 8,遍历代码,把所有 var 参数名绑定到 Environment Record,赋值为 undefined |
5 rabbbit 2018 年 11 月 22 日 |
6 shpasspass OP 之前以为 if(false){}的话,计算机就不会去代码块里面,现在看来,是会进去的,只做变量提升而不执行 多谢楼上各位 |
7 xhyzidane 2018 年 11 月 22 日 都在说变量提升,其实还有块级作用域的原因 这里 var a = 2 的作用域就是函数 foo,foo 内部作用域的变量提升影响到了 console.log |
8 zjp 2018 年 11 月 22 日 via Android @shpasspass 这是编译器干的活了 |
9 di1012 2018 年 11 月 22 日 via Android 不是执行了,是初始化了 |
10 FEDT 2018 年 11 月 23 日 via iPhone var 声明的再其词法作用域内生效 |
11 66beta 2018 年 11 月 23 日 via Android js 萌新?嘿嘿嘿,这才刚开始呢! |