小冯备战校招:前端面试题02

152 阅读2分钟

第 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?。

Constlet声明的变量并不在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

变量提升在前面 所以为undefined 最后一个声明了a 赋值为20 则打印20中间的 打印window.在外边打印
window.a 等于 10 所以打印 10 a = 5 实则是在局部作用域里创建的 a 赋值为 5 所以并不会输出

// 第 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为

{n:2} a为undefined