第 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?。
Const和let声明的变量并不在window上 而是保存在一个字变量区 可以在它声明的块级作用域访问 直接获取即可
class、let定义的即便是全局对象,但不是顶层对象的属性,在window自然获取不到,只能去定义变量的块级作用域里获取
但ES6规定,var 命令和 function 命令声明的全局变量,依旧是顶层对象的属性,但 let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。
通过上图也可以看到,在全局作用域中,用 let 和 const 声明的全局变量并没有在全局对象中,只是一个块级作用域(Script)中
怎么获取?在定义变量的块级作用域中就能获取啊,既然不属于顶层对象,那就不加 window(global)呗。
var a = 10;(function () {
console.log(a)
a = 5
console.log(window.a)
var a = 20;
console.log(a)})()
下面代码 会输出什么?
答 这是一道变量提升的题目后面声明了var a 但是前面打印a 显示为 a undefined
// 第 50 题:(百度)实现(5).add(3).minus(2) 功能。
// 例: 5 + 3 - 2,结果为 6
Number.prototype.add = function(x){
return this.valueOf() + x;
}
Number.prototype.minus = function(x){
return this.valueOf() - x;
}
console.log((5).add(3).minus(2));
console.log(typeof((5).add(3).minus(2)));
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x)
console.log(b.x)
这是一道连续赋值的坑 可惜我落在坑里面啦 哈哈哈
a . X =a ={n:2};
普通赋值还是蛮清楚的 但是连续赋值 就不太OK了
画图 帮助理解 比较简单 记在笔记本上了
. 优先级 高于=
a . X 使用过了 所以还是用原来对象的地址 所以则b为