1
ipwx 2018-11-22 19:26:23 +08:00
用 let 不要用 var
|
2
morethansean 2018-11-22 19:27:15 +08:00 via Android 2
变量提升。任何一个基础教程都会讲吧感觉?
|
3
LancerComet 2018-11-22 19:30:27 +08:00 1
var a = 1
function foo () { var a = undefined if (false) { a = 2 } console.log('a:', a) } foo() |
4
rabbbit 2018-11-22 19:41:12 +08:00 3
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 19:42:48 +08:00 1
|
6
shpasspass OP 之前以为 if(false){}的话,计算机就不会去代码块里面,现在看来,是会进去的,只做变量提升而不执行
多谢楼上各位 |
7
xhyzidane 2018-11-22 23:29:55 +08:00
都在说变量提升,其实还有块级作用域的原因
这里 var a = 2 的作用域就是函数 foo,foo 内部作用域的变量提升影响到了 console.log |
8
zjp 2018-11-22 23:39:01 +08:00 via Android
@shpasspass 这是编译器干的活了
|
9
di1012 2018-11-22 23:46:19 +08:00 via Android
不是执行了,是初始化了
|
10
FEDT 2018-11-23 01:10:40 +08:00 via iPhone
var 声明的再其词法作用域内生效
|
11
66beta 2018-11-23 09:12:18 +08:00 via Android
js 萌新?嘿嘿嘿,这才刚开始呢!
|