JS作用域
2016-03-04 15:08
253 查看
前些天看到了关于JS作用域的文章,结合自己之前了解的一些,在这里做了一个小小的总结。
作用域也就是变量能够在声明它的函数体以及这个函数体所嵌套函数体中都是被定义的。
举个简单的例子
function scope(){
var f=“foo“;
if(2<3){
var a="1";
console.log("f:"+f);//foo
}
while(1){
var b="22";
console.log("f:"+f);//foo
}
!function(){
var c="333";
console.log("f:"+f);//foo
}
console.log(
f;//foo
a;//1
b;//
22
c;//c is not undefined
);
}
根据这个例子可以看出,在scope体内定义的变量f可以在函数体内及内部嵌套的函数体、语句块中访问,所以f作用域就是scope函数体。
在js中,没有块级作用域,只有函数作用域。注意:如果一个变量没有使用var声明,这个变量便是全局变量,它的作用域便属于window对象。
作用域链:一个函数体嵌套了多层函数体,在每层函数体内定义了同一变量,当其中一个函数访问这个变量时,就会形成一条作用域链。
eg.f="window";
function one(){
var f="one";
function two(){
var f="two";
console.log(f);
}
function three(){
console.log(f);
}
two();//two
three();//one
}
one();
上面的函数当我们执行two时,会形成如下的作用域链:two—>one—>window,此时,js引擎沿着作用域链找到two中对应的f为”two“;
执行three时,作用域链是three—>one—>window,因此找到了”one“。
作用域也就是变量能够在声明它的函数体以及这个函数体所嵌套函数体中都是被定义的。
举个简单的例子
function scope(){
var f=“foo“;
if(2<3){
var a="1";
console.log("f:"+f);//foo
}
while(1){
var b="22";
console.log("f:"+f);//foo
}
!function(){
var c="333";
console.log("f:"+f);//foo
}
console.log(
f;//foo
a;//1
b;//
22
c;//c is not undefined
);
}
根据这个例子可以看出,在scope体内定义的变量f可以在函数体内及内部嵌套的函数体、语句块中访问,所以f作用域就是scope函数体。
在js中,没有块级作用域,只有函数作用域。注意:如果一个变量没有使用var声明,这个变量便是全局变量,它的作用域便属于window对象。
作用域链:一个函数体嵌套了多层函数体,在每层函数体内定义了同一变量,当其中一个函数访问这个变量时,就会形成一条作用域链。
eg.f="window";
function one(){
var f="one";
function two(){
var f="two";
console.log(f);
}
function three(){
console.log(f);
}
two();//two
three();//one
}
one();
上面的函数当我们执行two时,会形成如下的作用域链:two—>one—>window,此时,js引擎沿着作用域链找到two中对应的f为”two“;
执行three时,作用域链是three—>one—>window,因此找到了”one“。
相关文章推荐
- 什么是json
- JavaScript prototype 使用介绍
- js限定内容的溢出滚动(offset,style.left)
- js keyup、keypress和keydown事件 详解
- JS代码判断IE6,IE7,IE8,IE9!
- 读javascript高级程序设计16-几条函数小技巧
- 关于动作发生在请求前还是请求后(以点赞为例)
- 在jsp页面判断如果有信息就提示,否则不提示
- javascript 美术馆--改进1
- xml互转Bean,json(dom4j,xpath,Xstream)
- JavaScript方法声明和调用的问题
- vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
- [转]看懂ExtJS的API
- 使用JS获取表单元素里面的内容
- JAVASCRIPT 语言中的 this
- javascript 垃圾回收机制
- 8、JavaScript深入浅出——数据类型
- JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
- MVC中调用Public_Class时,VS2012老提示:当前上下文中不存在名称“Json”的解决方法
- JS入门笔记