-
1. 局部变量和局部函数
无论是ES6之前还是ES6, 只要定义一个函数就会开启一个新的存储空间, 就会新增一个作用域
只要是在这个新的作用域中, 通过 let / var 定义的变量就是局部变量
-
只要是在这个新的作用域中, 定义的函数就是局部函数
function demo() { // 局部变量 var num = 123; let value = 456; // 局部函数 function test() { console.log("test"); } // 在这个作用域中, 可以正常输出变量和调用函数 console.log(num); console.log(value); test(); } // demo(); // 报错 console.log(num); console.log(value); test();
-
2. 什么是对象的私有变量和函数
-
默认情况下对象中的属性和方法都是公有的, 只要拿到对象就可以操作对象的属性和方法
function Person() { this.name = "lnj"; this.age = 34; this.say = function () { console.log("hello world"); } let obj = new Person(); // 结论: 默认情况下对象的属性和方法都是公开的, 只要拿到对象就可以操作对象的属性和方法 console.log(obj.name); // lnj console.log(obj.age); // 34 obj.say(); // hello world
-
外界不能直接访问的变量和函数, 就是私有变量和私有函数
-
构造函数本质也是一个函数, 所以也会开启一个新的作用域, 所以在构造函数中定义的变量和函数就是私有属性和私有函数
function Person() { this.name = "lnj"; // this.age = 34; let age = 34; // 私有属性 this.say = function () { console.log("hello world"); } // 由于构造函数也是一个函数, 所以也会开启一个新的作用域 // 所以在构造函数中通过var/let定义的变量也是局部变量 // 所以在构造函数中定义的函数也是局部函数 var num = 123; let value = 456; function test() { console.log("test"); } } let obj = new Person(); console.log(age); // 报错
-
-
什么是封装?
- 封装性就是隐藏实现细节, 仅对外公开接口
-
为什么要封装?
- 不封装的缺点: 当一个类把自己的成员变量暴露给外部的时候, 那么该类就失去对属性的管理权, 别人可以任意的修改你的属性
- 封装的好处: 封装就是将数据隐藏起来, 只能用此类方法才可以读取或者设置数据, 不可被外部任意修改, 封装是面向对象设计本质(将变化隔离)。这样降低了数据被误用的可能(提高安全性和灵活性)
function Person() { this.name = "lnj"; // this.age = 34; // 将不需要对外的属性通过设置私有属性隐藏起来 let age = 34; // 私有属性 // 如果想让别人在一定条件内修改私有属性, 可以再添加一个公有方法 this.setAge = function (myAge) { if (myAge >= 0) { age = myAge; } } // 如果想让别人获取修改后的属性, 可以再添加一个公有方法 this.getAge = function () { return age; } this.say = function () { console.log("hello world"); } } obj.setAge(55); console.log(obj.getAge()); // 55 obj.setAge(-3); console.log(obj.getAge()); // 34
-