第一道:
var a = 10; // 全局作用域,全局变量。a=10
function foo() {
// var a
//的声明将被提升到到函数的顶部。
// 比如:var a
console.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'仅在此处初始化,值为20
let a = 20;
}
foo();
结果是:
看图说话:
第三道:
var x = 10; // 全局变量
var foo = {
x: 90,//foo对象的内部属性
getX: function() {
return this.x;
}
};
foo.getX(); // 此时是指向的foo对象,
console.log(foo.getX())
//所以打印的是X属性 值就是90
let xGetter = foo.getX;//xGetter是在全局作用域,
//这里的this就是指向window对象
xGetter();
console.log(xGetter())// 打印 10
结果:
看图说话:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/149816.html