变量作用域

Posted 好_快

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量作用域相关的知识,希望对你有一定的参考价值。

第二题 引用类型作用域

题目

    function Person(name, age) 
        this.name = name;
        this.age = age;
    

    function func1(person) 
        person.name = "liSi";
        person = new Person("wangWu", 20);
    
    var person = new Person("zhangSan", 10);
    console.log(person.name);
    func1(person);
    console.log(person.name);

分析

    //构造函数
    function Person(name, age) 
        this.name = name;
        this.age = age;
    
    //普通函数
    function func1(person) 
        /**
         * 0、var person = personObj;
         * 1、person 为函数作用域内的局部变量,personObj 为全局变量
         * 2、person 指向 personObj
         * 3、操作 person 的属性和方法等于操作 personObj 属性和方法
         * 4、全局变量personObj的name属性被修改为liSi
         */
        person.name = "liSi";

        /*
         * 局部变量 person 指向了新的 Person 示例对象,不再是 personObj 对象
         * */
        person = new Person("wangWu", 20);
        person.name = "zhaoLiu";
    
    var personObj = new Person("zhangSan", 10);
    console.log(personObj.name); //直接打印person.name属性:zhangSan
    func1(personObj);
    console.log(personObj.name); //person.name属性已经被修改:liSi

输出结果

zhangSan
liSi

第一题 值类型作用域

题目

    var num1 = 1;
    var num2 = 2;
    function func1(num, num1) 
        num = 10;
        num1 = 20;
        num2 = 30;
        console.log(num1);
        console.log(num2);
        console.log(num);
    
    func1(num1, num2);
    console.log(num1);
    console.log(num2);
    console.log(num);

分析

    var num1 = 1;
    var num2 = 2;
    function func1(num, num1) 
        // var num; //函数作用域局部变量
        // var num1; //函数作用域局部变量
        num = 10; //局部变量赋值
        num1 = 20; //局部变量赋值
        num2 = 30; //函数作用域没有,到全局作用域寻找,全局变量,值被修改为20
        console.log(num1); //局部变量:20
        console.log(num2); //全局变量:30
        console.log(num); //局部变量:10
    
    func1(num1, num2);
    console.log(num1); //全局变量:1
    console.log(num2); //全局变量:30
    console.log(num); //报错 Uncaught ReferenceError: num is not defined

输出结果

20 
30 
10
1
30
Uncaught ReferenceError: num is not defined

代码

作用域

以上是关于变量作用域的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 作用域作用域链变量提升

JavaScript 作用域作用域链变量提升

作用域作用域链自由变量变量提升

JS块级作用域和私有变量实例分析

变量的作用域

js 静态作用域和动态作用域