1. 看人家举的两个例子,我认为这里的判断是否定义: !var 其实就是 指是否在函数function里面定义了。只有在funciton里面定义了了,js才hoist到最上面去找这个变量的值,否则就按照你自己在函数里定义的规则来了。
[转载请注明来自: http://blog.csdn.NET/sunxing007]
下面的程序是什么结果?
- var foo = 1;
- function bar() {
- if (!foo) {
- var foo = 10;
- }
- alert(foo);
- }
- bar();
结果是10;
那么下面这个呢?
- var a = 1;
- function b() {
- a = 10;
- return;
- function a() {}
- }
- b();
- alert(a);
结果是1.
再看下面这个例子,感觉就是只有在funtion里面才会发生上面的变量提升?单纯的if 可没用
- var x = 1;
- console.log(x); // 1
- if (true) {
- var x = 2;
- console.log(x); // 2
- }
- console.log(x); // 2
结果会是1 2 2。因为javascript是函数作用域。这是和c家族语言最大的不同。该程序里面的if并不会创建新的作用域。
对于很多C,c++,Java程序员来说,这不是他们期望和欢迎的。幸运的是,基于javascript函数的灵活性,这里有可变通的地方。如果你必须创建临时的作用域,可以像下面这样: