作用域属性是在定义函数的时候决定的,不是在调用函数的时候决定。
JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。
-
eg.
var name = "lw"; function alert_1 () { alert(name); } function alert_2 () { var name = "zgm"; alert_1(); } alert_2();// 结果:lw
js的预编译:
在一段js代码执行之前,会预先处理var关键字和function定义式(函数表达式和函数定义式),对于局部变量,变量的值会在真正执行的时候计算。
函数定义注意:函数定义式和函数表达式的不同, 对于函数定义式, 会将函数定义提前.而函数表达式, 会在执行过程中才计算。
-
eg.
alert(typeof hello);//结果:function alert(typeof world);//结果:undefined function hello(){ //函数定义式 alert("hello"); } var world=function(){ //函数表达式 alert("world"); } alert(typeof world);//结果:function
-
js预编译是以段为处理单元
<script> alert(typeof hello); //结果:undefined </script>
<script> function hello() { alert('hello world'); } </script>
-
作用域链代码优化在标识符解析的时候,查找全局变量是最慢的,所以尽量使用局部变量。
function changeColor(){ var doc=document; doc.getElementById("NM").onclick=function(){ doc.getElementById("AL").style.backgroundColor="red"; }; }
全局变量document的被调用两次,查找该变量必须遍历整个作用域链,耗费时间,可以把它存储到局部变量里再使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。