3道js经典面试题

 第一道:

 var a = 10; // 全局作用域,全局变量。a=10function foo() {// var a //的声明将被提升到到函数的顶部。// 比如:var aconsole.log(a); // 打印 undefined// 实际初始化值20只发生在这里var a = 20; // local scope}foo();

看图说话:

 第二道:

let和const声明可以让变量在其作用域上受限于它所在的块、语句或表达式中。和var不同的地方在于,这两个声明的变量,不会被提升。并且我们会有一个称为暂时死区(TDZ)。如果访问TDZ中的变量的话,就会报ReferenceError,因为他们的的作用域是在他们声明的位置的,不会有提升。所以必须在执行到声明的位置才能访问。

var a = 10; // 全局使用域function foo() { // TDZ 开始// 创建了未初始化的'a'console.log(a); // ReferenceError// TDZ结束,'a'仅在此处初始化,值为20let a = 20;}foo();

结果是:

看图说话:

第三道:
 

 var x = 10; // 全局变量var foo = {x: 90,//foo对象的内部属性getX: function() {return this.x;}};foo.getX(); // 此时是指向的foo对象,console.log(foo.getX())//所以打印的是X属性 值就是90let xGetter = foo.getX;//xGetter是在全局作用域,//这里的this就是指向window对象xGetter(); console.log(xGetter())// 打印 10

结果:

看图说话:

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部