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不是上一个值
总结:关于变量提高,必定要注意细心思考一下,还有就是,函数提高在变量提高之上。
提高的顺序是:函数-->变量提高
变量的提高就是先把全部的变量的定义先提取出来,而后再开始对变量去赋值。