今天完成的事情:this 指向及改变this指向方法;const、let与var
明天计划的事情:箭头函数知识点;angular核心思想;;
收获:
// this 指向
/**
* 实例一:
*/
function b() {
var user = "天涯";
console.log(this.user); // undefined
console.log(this); // Window {window: Window, self: Window, document: document, name: "", location: Location, …}
}; window.b();
function c() {
var user = "loong";
console.log(this.user); // undefined
console.log(this); // Window {window: Window, self: Window, document: document, name: "", location: Location, …}
}; c();
/**
* 实例二:
*/
var a = {
user: "追梦",
fn: function () {
console.log(this.user); // 追梦
console.log(this); // {user: "追梦", fn: ƒ}
}
}; a.fn();
/**
* 实例三:
*/
var o = {
a: 10,
b: {
a: 12,
fn: function () {
console.log(this.a); // 12
console.log(this)
}
}
}; o.b.fn();
// var o = {
// user: "辛弃疾",
// fn: function () {
// console.log(this.user) // 辛弃疾
// console.log(this); // {user: "辛弃疾", fn: ƒ}
// }
// }; window.o.fn();
// 情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。
// 情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
// 情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象,
var o = {
a: 10,
b: {
// a:12,
fn: function () {
console.log(this.a); //undefined
}
}
}
o.b.fn();
var o = {
a: 10,
b: {
a: 12,
fn: function () {
console.log(this.a); //undefined
console.log(this); //window
}
}
}
var j = o.b.fn;
j();
const、let与var区别:
1、var。var声明的变量没有块级作用域,而且存在变量名提升的情况。
2,const(es6中用来定义常量的一个关键字(当然了,其他语言里也存在着const,这里仅指在js中)。常用来声明常量,且常量不可修改,必须初始化,存在着块级作用域。
(1)、不存在名称提升问题。
(2)、声明时必须初始化。
(3)、存在着块级作用域。
<script>
const num = 456
if (true) {
const num = 789;
console.log(num); // 789
}
console.log(num) // 456
</script>
3、let(es6中用来定义变量的一个关键字)。let定义的变量存在着块级作用域,在函数内定义的变量,对函数外部无影响。
(1)、在函数内部定义的变量,对函数外部无影响,即存在着块级作用域。
(2)、不存在着变量名的提升。
评论