冯自强
冯自强
和楼上一样的问题,想了半天也没想通,val确实不是引用类型。
@fishelren,不知道你有没有得到答案?起先我以为val = newVal会调用get方法,导致属性值改变,但是调试发现并没有进get方法。
@fishelren 但是单步调试会发现,他就是在赋值语句val = newVal里面改变的属性值。。。
@youngwind,感谢解答!明白了。以前看过阮一峰老师这篇文章,但是没有理解到,现在算是真正的理解闭包了。
@wangshengkun ECMAScript中指定了两种属性:数据属性和访问器属性。 数据属性包含四个特性:[[Configurable]],[[Enumerable]],[[Writable]],[[Value]],我们直接通过字面量形式声明一个对象 `var person = { name: "Nill" }` 通过person.name //Nill 访问对象属性时,其实直接读取的是[[Value]]上的值,同理,通过person.name = "Nike" 设置对象属性时,其实是直接[[Value]]被设置为了指定的值。 访问器属性也有四个特性:[[Configurable]],[[Enumerable]],[[Get]],[[Set]]。不同于数据属性,[[Get]]是用于读取对象属性的函数,[[Set]]是用于设置对象属性的函数。在JavaScript中我们使用Object.defineProperty来定义访问器属性: `Object.defineProperty(person,"name",{ get:function () { return this.name; }, set:function (newVal) { this.name = newVal;...