首页 > 编程语言 > 详细

JavaScript 作用域

时间:2019-05-21 11:40:04      阅读:90      评论:0      收藏:0      [点我收藏+]

 

此文只是对作用域的简单见解!


 

作用域分为局部全局作用域,简单来说,局部作用域是以某个函数(或块级作用域)作为域空间,它的作用只在函数这个小房间内有用; 而全局则是以整个页面为域空间。

块级作用域:即一对大括号之间的域,但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 函数

//域可以向上链式使用,但不可向下。
//只能从子级向父级找,不能从父级向子级找。

 

正在学习中的小白~,简单记录一下此时的理解,若有不当,欢迎指正!

 

JavaScript 作用域

原文:https://www.cnblogs.com/JaneBlog/p/10898546.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!