什么叫做全局作用域:
1.在最外层函数和最外层函数定义的变量所处的环境就是全局作用域。2.在内层函数中,所有没有用var申明的变量,自动变成全局作用域下的属性。
局部作用域:
一个函数的括号范围就叫局部作用域,但是for语句等并没有局部作用域。
作用域链决定了哪些数据能被函数访问。当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充。
内部的函数。
局部变量的优先级大于全局变量的优先级
词法作用域:词法作用域是指在词法分析阶段就确定了,不会改变。变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域。
动态作用域:动态作用域是在运行时根据程序的流程信息来动态确定的,而不是在写代码时进行静态确定的。 动态作用域并不关心函数和作用域是如何声明以及在何处声明的,只关心它们在何处调用。
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
如上所示,执行bar()的时候,执行到了foo函数。foo函数中并没有value值,JavaScript会自动到定义foo函数的上一层作用域下去寻找value值,也就是1.