javascript函数作用域和嵌套调用关系
2016-06-07 10:04
351 查看
JavaScript 的作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域。
特别注意:JavaScript 的作用域完全是由函数来决定的, if 、 for 语句中的花括号不是独立的作用域。
在函数中引用一个变时,JavaScript 会先搜索当前函数作用域,或者称为“局部作用域”,如果没有找到则搜索其上层作用域,一直到全局作用域。
函数作用域的嵌套关系是定义时决定的,而不是调用时决定的,也就
是说,JavaScript 的作用域是静态作用域,又叫词法作用域,这是因为作用域的嵌套关系可以在语法分析时确定,而不必等到运行时确定。下面的例子说明了这一切:
var scope = ‘top’;
var f1 = function() {
console.log(scope);
};
f1(); // 输出 top
var f2 = function() {
var scope = ‘f2’;
f1();
};
f2(); // 输出 top
这个例子中,通过 f2 调用的 f1 在查找 scope 定义时,找到的是父作用域中定义
的 scope 变量,而不是 f2 中定义的 scope 变量。这说明了作用域的嵌套关系不是在调用
时确定的,而是在定义时确定的。
特别注意:JavaScript 的作用域完全是由函数来决定的, if 、 for 语句中的花括号不是独立的作用域。
在函数中引用一个变时,JavaScript 会先搜索当前函数作用域,或者称为“局部作用域”,如果没有找到则搜索其上层作用域,一直到全局作用域。
函数作用域的嵌套关系是定义时决定的,而不是调用时决定的,也就
是说,JavaScript 的作用域是静态作用域,又叫词法作用域,这是因为作用域的嵌套关系可以在语法分析时确定,而不必等到运行时确定。下面的例子说明了这一切:
var scope = ‘top’;
var f1 = function() {
console.log(scope);
};
f1(); // 输出 top
var f2 = function() {
var scope = ‘f2’;
f1();
};
f2(); // 输出 top
这个例子中,通过 f2 调用的 f1 在查找 scope 定义时,找到的是父作用域中定义
的 scope 变量,而不是 f2 中定义的 scope 变量。这说明了作用域的嵌套关系不是在调用
时确定的,而是在定义时确定的。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享