- let var 作用域 作用域链
function foo() {
console.log(this.num)
}
var num = 4;
foo();
// 4
let name = "John";
function sayHi() {
alert("Hi, " + name);
}
name = "Pete";
sayHi();
// pete
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// 创建一个函数
let work = makeWorker();
work();
// Pete
var name = 'Tom';
(function() {
if (typeof name == 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
// Goodbye Jack
var name = 'Tom';
(function() {
if (typeof name == 'undefined') {
let name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
// Hello Tom
暂时性死区:
报错的区别
function test1() {
test2()
}
function test2() {
test1()
}
test1() // Uncaught RangeError: Maximum call stack size exceeded
假如不存在提升这个情况,那么就实现不了上述的代码,因为不可能存在 test1 在 test2 前面然后 test2 又在 test1 前面。
let a = function test1() {
test2()
}
let b = function test2() {
test1()
}
a() // Uncaught ReferenceError: test2 is not defined
- this 箭头函数 自行函数 普通函数 对象 构造函数
- 在普通函数下,谁调用这个函数,this指向谁。
- 而箭头函数没有 this,它会从自己的作用域链的上一层继承 this(因此无法使用 apply / call / bind 直接修改 this 值, 可以改变作用域中this的指向可以改变箭头函数的this,eg. function closure(){()=>{//code }},在此例中,我们通过改变封包环境closure.bind(another)(),来改变箭头函数this的指向)。
var name = 'window'
var person1 = {
name: 'person1',
show1: function ()