var变量的提高

JS代码解析原则javascript

  首先js引擎在读取js代码时会进行两个步骤,第一个步骤是解释,第二个步骤是执行。java

所谓解释就是会先通篇扫描全部的js代码,而后把全部声明提高到顶端,第二步是执行,执行就是操做一类的。函数

案例1:spa

<script type="text/javascript">   
  console.log(a);   
  var a=10;
</script>

以上代码输出undefinedip

  缘由:变量提高(把变量声明提高到当前执行环境的最顶端)it

以上这段代码至关于:io

  var a ;console

  console.log(a);function

  a=10;变量

案例2:

<script type="text/javascript"> 
  foo();
  function foo() {
    console.log("aaa");
  }
</script>

结果输出:aaa

原理:函数声明提高(函数声明提高直接把整个函数提到执行环境的最顶端)

至关于:

function foo() { 
  console.log("aaa");
}
foo();

 变量提高只提高函数名,而函数提高会提高整个函数题。注意:函数提高在变量提高上面。

案例3:

 foo(); 
foo=function() {
  console.log("aaa");
}

 运行结果是:foo is not a function

缘由:仍是进行了变量提高

至关于:

var foo; 
console.log(foo);//undefined
foo();//foo is not a function
foo=function() {
  console.log("aaa");
}

 上面代码输出undefined是由于变量提高后并无赋值所以输出undefined

输出foo is not function 缘由是:js解析遇到foo()时会默认当作函数来解析

案例4:

console.log(foo); 
var foo=10;
function foo() {
  console.log(10);
}
console.log(foo);

输出结果:

f foo(){

  console.log(10);

}

10

10

>

原理:

至关于:

function foo() { 
  console.log(10);
}
var foo;
console.log(foo);
foo=10;
console.log(foo);
console.log(foo);

注意:函数提高在变量提高上面,第一个console.log(foo);为何会输出函数题呢。缘由在于var foo;并未有赋值只是声明,所以他会调用上面的值

例如:

var  b=10;

b=10;

console.log(b);//10 输出上一个值不会输出undefined

可是更改后:

var b =10;

b=20;

console.log(b);//20 输出20不是上一个值

 

总结:关于变量提高,必定要注意细心思考一下,还有就是,函数提高在变量提高之上。

提高的顺序是:函数-->变量提高

变量的提高就是先把全部的变量的定义先提取出来,而后再开始对变量去赋值。

相关文章
相关标签/搜索