js作用域

一. 什么是作用域
 
它是指对某一变量和方法具有访问权限的代码空间, 在JS中, 作用域是在函数中维护的.
 
表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境。Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的。

二、作用域的注意事项

1.js的作用域是有函数划分的,而不是块儿

var too="test";
if(true){//这是在块中的定义,此时还是全局变量
var too="new test";
}
alert(too=="new test");//return true;
function test()
{
var too="old test";//这是在函数中的定义,此时是局部变量
}
test();
alert(too=="new test");//return true;too并没有改变

2.所属于全局作用域的变量都是window对象的属性

上面例子中 第一行的 too就是等于 window.too

看下面的例子

function test()
{
too="test";
}
test();
alert(window.too="test");

是不是很奇怪,上面例子中函数中的too是局部变量,在这里就是全局变量了

注意下两个例子的区别,一个通过显示声明 var too

一个隐示声明too="test";

也就是说没有显示定义的变量,它就是全局变量,虽然它可能只能在这个函数内使用。

三、作用域实例

1、

if(true){ 
   var aa= "bb"; //全局变量
} 
console.log(aa); //bb 

for(var i = 0; i < 100; i++){ 
//do 
} 
console.log(i); //100 

2、

var bb = '11111'; //全局变量
function aa() { 
   alert(bb);//函数内部定义了一个同名的bb变量,此bb为局部变量,由于变量提升,导致bb为undefine 
   var bb = 'test'; 
   alert(bb);//test 
  var cc = "test1"; 
   alert(age);//语法错误 
} 
aa(); 

3、

var test = '1111111'; 
function aa() { 
   alert(test); 
} 

function bb() { 
   var test = '22222222'; 
   aa(); 
} 
bb();//alert(1111111); 

4、

alert(typeof aa); //function 
alert(typeof bb); //undefined 

function aa() { //函数定义式 
   alert('I am 111111111'); 
}; 
var bb = function() { //函数表达式 
} 

alert(typeof bb);//function 

5、

function aa(){ 
   var bb = "test"; 
   cc = "测试"; 
   alert(bb); 
} 

aa(); 
alert(cc);//测试 
alert(bb);//语法报错 

四、this指针作用域

在这里列出this在ECMAScript中的不同含义

(1) 在全局执行环境中使用this,表示Global对象,在浏览器中就是window对象。

(2) 当在函数执行环境中使用this时,情况就有些复杂了。如果函数没有明显的作为非window对象的属性,而只是定义了函数,不管这个函数是不是定义在另 一个函数中,这个函数中的this仍然表示window对象。如果函数显示地作为一个非window对象的属性,那么函数中的this就代表这个对象。 (当然可以使用apply或者call函数来取代默认this的引用,详见[P88])

(3) 当通过new运算符来调用函数时,函数被当做一个构造函数,this指向构造函数创建出来的对象。

五、作用域链

可以被看作一种路径, 沿着这条路径可以确定变量的值.

六、作用域链的特点

(1) var关键字决定了哪个函数是变量的作用域链的终点;
(2) 当引用一个变量时, JS会沿着由对象执行路径构成的作用域链进行解析, 查找变量最近定义的值, 一旦找到, 即使用该值.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值