JavaScript执行环境及作用域
来源:互联网 发布:淘宝屈臣氏燕窝面膜 编辑:程序博客网 时间:2024/06/05 22:56
(还是看代码比较直观...)
执行环境(环境): 定义了变量或函数有权访问的其他数据,决定了它们各自的行为.
变量对象: 每个环境中都有一个变量对象,环境中定义的所有函数和变量都保存在这个对象中.
window是最外围的全局环境.
执行流: 当执行流进入一个函数时, 函数的环境就被推入环境栈中,函数执行完后又被栈弹出, 将控制权返回给之前的执行环境.
作用域链: 当代码在一个环境中执行时,会创建变量对象的一个作用域链. 当前代码的执行环境就是作用域链的前端. 如果是函数则将其活动对象作为变量对象, 开始时只有一个arguments变量(这个变量在全局环境中是不存在的).作用域链中的下一个变量对象来自包含(外部)环境,一直延续到全局环境中.
例1
var color = "blue";function changeColor () {if (color === "blue") {color = "red";} else {color = "blue";}}changeColor();alert("Color is now " + color);//red
例2
在局部作用域中定义的变量可以在局部环境中与全局变量互换使用,如:var color = "blue";function changeColor() {var anotherColor = "red";function swapColors() {var tempColor = anotherColor;anotherColor = color;color = tempColor;//这里color,anotherColor,tempColor三个变量都可以访问}//这里可以访问color和anotherColor, 但不能访问tempColor,swapColors()}//这里只能访问color和changeColor();
if (true) { var color = "blue";}alert(color); //"blue"
if语句里定义变量color, 如果在C家族会在if执行后销毁,但JavaScript中if语句中的变量声明会将变量添加到当前执行环境中. 尤其是for语句
for(var i = 0; i < 10; i++) { doSomething(i);}alert(i); //10对于有块级作用域的语言来说for语句初始化变量的表达式所定义的变量,只会存在for语句中
声明变量
使用var声明的变量会自动被添加到最接近的环境中. 在函数内部就是函数的局部环境;
function add(num1, num2) {var sum = num1 + num2;return sum;}var result = sum(10, 20);//30alert(sum);//由于sum不是有效的变量,因此会导致错误
查询标识符
先从作用域链的前端查找逐级向上,如果在局部环境中找到就停止搜索
var color = "blue";function getColor() { return color;}alert(getColor()); //blue
var color = "blue";function getColor() {var color = "red";return color;}alert(getColor()); //"red"
0 0
- javascript的执行环境及作用域
- JavaScript-执行环境及作用域
- JavaScript执行环境及作用域
- javascript中的执行环境及作用域
- JavaScript:执行环境及作用域链
- javascript 执行环境及作用域
- JavaScript执行环境及作用域
- JavaScript执行环境及作用域
- JavaScript执行环境及作用域
- JavaScript执行环境及作用域
- JavaScript执行环境及作用域
- JavaScript之执行环境及作用域
- JavaScript的执行环境及作用域
- javascript执行环境及作用域【javascript高级程序设计】
- JavaScript初学笔记之<执行环境及作用域>
- [2017-01-26]JavaScript执行环境及作用域
- 在javascript中,执行环境及作用域
- 浅谈JavaScript执行环境及作用域链
- poj 2456 Aggressive cows (二分)
- android studio运行程序时正常,调试时出现NoSuchMethodException的解决办法
- 第十二周:83. Remove Duplicates from Sorted List
- Android安全防护之旅---带你把Apk混淆成中文语言代码
- [IOS APP] 档案-2016年07月至12月
- JavaScript执行环境及作用域
- native2ascii转码
- CCF201403(1)相反数
- 利用opengl es画立方体的简单流程
- QT学习笔记(5):自定义控件
- 前端开发者不得不知的 ECMAScript 6 十大特性
- vs2013 编译 ffplay
- java.lang.IllegalThreadStateException
- CSRF攻击