码迷,mamicode.com
首页 > 编程语言 > 详细

javascript作用域

时间:2015-07-04 18:07:09      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

作用域由函数决定

说实话,javascript的作用域有点让我混,因为和我之前学习的C、c++、java、php的作用域不同

例如:

if (true) {
    var msg = ‘msg‘;
}
console.log(msg); // 输出 msg;

 js中会输出msg,而如果换做其他语言,估计会出现undefined的错误

原因是,javascript的作用域完全是由函数来决定的,if、for语句中的花括号不是独立的作用域

 


作用域变量引用顺序

 

<!DOCTYPE html>
<html>
<head>
<script>
var msg = "global";
var func = function(){
    alert(msg);
}
func();
</script>
</head>
<body>
</body>
</html>

 

->输出结果“global”

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <script>
 5 var msg = "global";
 6 var func = function(){
 7     var msg = "inner";
 8     alert(msg);
 9 }
10 func();
11 </script>
12 </head>
13 <body>
14 </body>
15 </html>

->"inner"

JavaScript的函数定义是可以嵌套的,每一层是一个作用域,变量搜索顺序是从内到外,按照作用域搜索顺序,在func函数访问msg变量时,首先在func函数作用域查找该变量,若未找到该变量,在从上一级作用域查找,直到查找到全局变量为止


变量声明默认提前

 

javascript中的所用变量声明都会被自动提前

 

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <script>
 5 var msg = "global";
 6 var func = function(){
 7     alert(msg);
 8     var msg = "inner";
 9 }
10 func();
11 </script>
12 </head>
13 <body>
14 </body>
15 </html>

 

->显示undefined
因为该代码等价于下面的代码:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <script>
 5 var msg = "global";
 6 var func = function(){
 7     var msg;
 8     alert(msg);
 9     msg= "inner";
10 }
11 func();
12 </script>
13 </head>
14 <body>
15 </body>
16 </html>

 


作用域的嵌套关系是定义时决定的而不是调用时决定的

1 var scope = ‘global‘;
2 var f6 = function() {
3     console.log(scope);
4 }
5 var f7 = function() {
6     var scope = ‘f7‘;
7     f6();
8 }
9 f7(); // 输出 global

所有未定义的变量直接赋值,声明为全局变量

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <script>
 5 var msg = "global";
 6 var func = function(){
 7     ms1 = "我默认声明为全局变量";
 8 }
 9 func();
10 alert(ms1);//"我默认声明为全局变量";
11 </script>
12 </head>
13 <body>
14 </body>
15 </html>

 作用域链,请查看链接:http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html

javascript作用域

标签:

原文地址:http://www.cnblogs.com/smart-tian/p/4620872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!