a.作用域属性是在定义函数的时候决定的,不是在调用函数的时候决定。//JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里
eg.
var name="lw";
function alert_1(){
alert(name);
}
function alert_2(){
var name="zgm";
alert_1();
}
alert_2();//结果:lw
b.js的预编译:
1.在一段js代码执行之前,会预先处理var关键字和function定义式(函数表达式和函数定义式),对于局部变量,变量的值会在真正执行的时候计算。
2.函数定义注意:函数定义式和函数表达式的不同, 对于函数定义式, 会将函数定义提前.而函数表达式, 会在执行过程中才计算。
eg.
alert(typeof hello);//结果:function
alert(typeof world);//结果:undefined
function hello(){//函数定义式
alert("hello");
}
var world=function(){//函数表达式
alert("world");
}
alert(typeof world);//结果:function
c.js预编译是以段为处理单元
eg.
<script>
alert(typeof hello); //结果:undefined
</script>
<script>
function hello() {
alert('hello world');
}
</script>
d.作用域链代码优化在标识符解析的时候,查找全局变量是最慢的,所以尽量使用局部变量。
eg.
function changeColor(){
var doc=document;
doc.getElementById("NM").onclick=function(){ doc.getElementById("AL").style.backgroundColor="red";
};
}