javascript Hoisting变量提升

Posted 立中宵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript Hoisting变量提升相关的知识,希望对你有一定的参考价值。

1. 看人家举的两个例子,我认为这里的判断是否定义: !var 其实就是 指是否在函数function里面定义了。只有在funciton里面定义了了,js才hoist到最上面去找这个变量的值,否则就按照你自己在函数里定义的规则来了。

[转载请注明来自: http://blog.csdn.NET/sunxing007]

下面的程序是什么结果?

[javascript] view plain copy
 
  1. var foo = 1;  
  2. function bar() {  
  3.     if (!foo) {  
  4.         var foo = 10;  
  5.     }  
  6.     alert(foo);  
  7. }  
  8. bar();  

结果是10;

 

那么下面这个呢?

[javascript] view plain copy
 
  1. var a = 1;  
  2. function b() {  
  3.     a = 10;  
  4.     return;  
  5.     function a() {}  
  6. }  
  7. b();  
  8. alert(a);  

结果是1.

再看下面这个例子,感觉就是只有在funtion里面才会发生上面的变量提升?单纯的if 可没用

  1. var x = 1;  
  2. console.log(x); // 1  
  3. if (true) {  
  4.     var x = 2;  
  5.     console.log(x); // 2  
  6. }  
  7. console.log(x); // 2  

结果会是1 2 2。因为javascript是函数作用域。这是和c家族语言最大的不同。该程序里面的if并不会创建新的作用域。

 

对于很多C,c++,Java程序员来说,这不是他们期望和欢迎的。幸运的是,基于javascript函数的灵活性,这里有可变通的地方。如果你必须创建临时的作用域,可以像下面这样:

以上是关于javascript Hoisting变量提升的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中变量提升------Hoisting

JS中作用域和变量提升(hoisting)的深入理解

JS中作用域和变量提升(hoisting)的深入理解

动画篇:变量提升

javascript变量声明 及作用域

回归基础: JavaScript 变量提升