// 360 面试题
window.val = 1;
var obj = {
val :2,
dbl:function(){
console.log()
this.val *= 2
val *= 2;
console.log(val);
console.log(this.val);
}
}
obj.dbl();
var func = obj.dbl;
func()
// 最后的 执行 结果是 2 4 8 8
自己的解释 :
// 首先 window.val 是 全局变量。
// obj 下 的 val 是 obj 这个 对象 下的 变量 ,
// this.val *= 2 是 obj 下的 val 也就是 结果 就是 4
// val *= 2 是 全局 变量 在 函数中 没有用 val let const 声明, 直接 赋值的 是 全局 变量。 结果是 2
// func()
// obj.dbl 是把 dbl 这个 函数 拿出来了, 不在 obj下 。
// 所以 this.val 和 val 都是 全局 变量 由于 第一次执行 之后 val 这个 全局 变量 被改变成了 2 ,
// this.val *= 2 结果是 4 现在 全局变量 是 4 ,val *= 2 结果是 8
// 下面 两次 console.log() 的 都是 一个 值, 都是 全局 的 val
// 所以 第二次 执行的 结果 是 8 8 。
网友评论