https://www.jianshu.com/p/1f7595879c0b
js的作用域是词法作用域,无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。
域表示的就是范围,即作用范围,就是一个名字在什么地方可以别使用,什么时候不能使用。
作用域与作用域查询
作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。通俗的讲,作用域就是查找变量的地方。在某函数中找到该变量,就可以说在该函数作用域中找到了该变量;在全局中找到该变量,就可以说在全局作用域中找到了该变量!
作用域是一套规则,用于确定在何处以及如何查找变量(标识符),也就是说这套规则用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找;作用域规则是在代码的编译阶段确定的。
在JavaScript里并没有块级作用域,也就是说在for、if、while等语句内部的声明的变量与在外部声明是一样的,在这些语句外部也可以访问和修改这些变量的值。
function fun(){
if(0<2){
var name ="jeri";
}
console.log(name); //输出:jeri
name ="change";
console.log(name);// 输出:change
}
fun();
if(false){
var num=123;
}
console.log(num);//undefined
声明提升,但赋值没提升
在js中词法作用域规则:
-函数允许访问函数外的数据
-这个代码结构中只有函数可以限定作用域
-作用规则首先使用提升规则分析
-如果当前作用规则中有名字了,就不考虑外面的名字
var num=123;
function foo(){
var num=456;
function func(){
console.log(num);
}
func();//456
}
foo();
网友评论