此文只是对作用域的简单见解!
作用域分为局部与全局作用域,简单来说,局部作用域是以某个函数(或块级作用域)作为域空间,它的作用只在函数这个小房间内有用; 而全局则是以整个页面为域空间。
块级作用域:即一对大括号之间的域,但JavaScript 到 ES6 才有块级作用域,且需要使用 let 关键字定义的变量。
例如:
if (1<2){ var varA = 1; let letA = 0; console.log(varA);//1 console.log(letA);//0 } console.log(varA);//1 console.log(letA);// Uncaught ReferenceError: letA is not defined
此处以实例说一下正在学习时理解到的函数内的作用域。
function fooUseInOrOut() { var x = "outVarX"; var y = "outVarY"; function fooIn() { var x = "inVarX"; var j = "inVarJ"; console.log("fooIn:" + x + " " + y ); //可以用当前函数外部变量或函数 //当前函数 fooIn 与函数 fooUseInOrOut 下的变量 y 是同域,所以才可以使用 //但使用函数应注意是否会造成死循环调用 //调用函数可能会无限循环调用下去,直到死机; 或者直接报错:Uncaught RangeError: Maximum call stack size exceeded; //因此,在函数内部调用父级函数,应慎用! function a(){ console.log(y); //fooIn();//此处使用外部函数,造成无限次数调用函数,因为 a 函数包含在 fooIn 函数内 ,慎用!!! } a(); } fooIn(); console.log("fooUseInOrOut:" + x); //console.log(j);//不能用与当前函数不同域的变量,变量 y 是子函数 fooIn 中的变量,报错:Uncaught ReferenceError: j is not defined } fooUseInOrOut(); //fooIn();//会报错:Uncaught ReferenceError: fooIn is not defined ,当前域中并不存在 fooIn 函数 //域可以向上链式使用,但不可向下。 //只能从子级向父级找,不能从父级向子级找。
正在学习中的小白~,简单记录一下此时的理解,若有不当,欢迎指正!
原文:https://www.cnblogs.com/JaneBlog/p/10898546.html