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

探索javascirpt-作用域

时间:2015-03-31 12:30:44      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

1.使用var定义变量,和漏了var定义变量时的情况

  

function a() {
	function c(){
		cc = 4;
		function d() {
			console.log(cc);//4
		}

		d();
	}

	c();
	console.log(cc);//4
}
a();
console.log(cc);//4
console.log(window.cc);//4

  

很明显当未使用var定义变量时,cc变量被定义于全局变量,

但是,真的只要不使用var就会被挂入window吗?其实不是,看下列代码

 

 1 function a() {
 2     var bb = 3;
 3     var cc = 5;
 4     function c(){
 5         cc = 4;
 6         function d() {
 7             console.log(cc);//4
 8         }
 9 
10         d();
11     }
12 
13     c();
14     console.log(cc);//4
15 }
16 a();
17 console.log(cc); //undefined
18 console.log(window.cc); //underfined

是否很惊奇,此时cc被挂入了a函数里定义的cc,所以是否有领悟:

当未用var定义变量的时候,javascript引擎会检索作用域层级来解析用户名,从作用域链中一层一层往上查找变量,如果查找得到,边改变其值,如果整个作用域链中都查找不到,便会挂入window(nodejs为global),成为全局变量

2,javascript中的函数作用域是通过词法来划分的

  简单来说就是不管函数被在哪里调用,函数的作用域链早就在定义函数的时候固定了。

  此特性被广泛用于模块化,闭包。

探索javascirpt-作用域

标签:

原文地址:http://www.cnblogs.com/WJ-yellow/p/4380165.html

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