jiaqistart
This commit is contained in:
parent
5d39890424
commit
eca64f86c0
50
js/demo/day4-1.html
Normal file
50
js/demo/day4-1.html
Normal file
@ -0,0 +1,50 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
<script>
|
||||
var cat = {
|
||||
name: "大喵",
|
||||
run: function () {
|
||||
console.log("我会跑")
|
||||
},
|
||||
eat() {
|
||||
console.log("我在吃东西")
|
||||
}
|
||||
};
|
||||
|
||||
var dog = {
|
||||
name: "大汪",
|
||||
bark() {
|
||||
console.log("汪汪汪")
|
||||
},
|
||||
paqiang(m, n) {
|
||||
console.log(this)
|
||||
console.log(m, n, "我能爬墙")
|
||||
}
|
||||
}
|
||||
|
||||
// 大喵需要借用大汪的paqiang的技能
|
||||
// dog.paqiang.call(cat,1,2)
|
||||
dog.paqiang.apply(cat, [1, 2])
|
||||
dog.paqiang()
|
||||
|
||||
function a(val) {
|
||||
var name = val
|
||||
c = 0
|
||||
function b() { }
|
||||
}
|
||||
var str = 'Hello World'
|
||||
a(1)
|
||||
console.log(window.c)
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
0
js/demo/day4.html
Normal file
0
js/demo/day4.html
Normal file
0
js/kejian/1.html
Normal file
0
js/kejian/1.html
Normal file
111
js/kejian/day4.md
Normal file
111
js/kejian/day4.md
Normal file
@ -0,0 +1,111 @@
|
||||
# this 指向
|
||||
## 什么是 this
|
||||
this 是执行期上下文中的一个属性,设计目的是在函数体内部指代函数当前的运行环境,以方便引用当前环境的其他变量
|
||||
|
||||
## 判断this指向的规则
|
||||
**谁(对象)调用 就指向谁**
|
||||
如果没在对象里面 this就指向全局window(全局对象)
|
||||
如果在对象中,this指代的是当前对象实例,
|
||||
箭头函数例外,他的函数内部没有this 在执行到this的时候会去找外部对象 所以 箭头函数的this最终就指向他外一层的对象 当他只有一层的时候 this会指向全局对象 window
|
||||
|
||||
思考下面的代码 会输出什么
|
||||
```
|
||||
var aaa=1;
|
||||
var c=3
|
||||
function fn(){
|
||||
aaa=6
|
||||
console.log(this.aaa)
|
||||
}
|
||||
var obj={
|
||||
aaa:222,
|
||||
fn:function(){
|
||||
console.log(this.aaa)
|
||||
}
|
||||
fn1:()=>{
|
||||
console.log(this.aaa)
|
||||
}
|
||||
}
|
||||
fn()
|
||||
obj.fn() //222
|
||||
obj.fn1() //1
|
||||
console.log(this.c) //this==> window
|
||||
console.log(c) = console.log(window.c)
|
||||
```
|
||||
|
||||
# call 和 apply (改变this指向)
|
||||
### call
|
||||
作用 :改变this的指向
|
||||
语法: B.方法名.call(A,n,m...)
|
||||
这个方法本来是B拥有的,方法中的this 指向的也是B
|
||||
执行完这句call 之后, 方法中的this 指向A
|
||||
所以说A用了这个方法
|
||||
|
||||
|
||||
|
||||
```
|
||||
var cat={
|
||||
name:"大喵",
|
||||
run:function(){
|
||||
console.log("我会跑")
|
||||
},
|
||||
eat(){
|
||||
console.log("我在吃东西")
|
||||
}
|
||||
};
|
||||
|
||||
var dog={
|
||||
name:"大汪",
|
||||
bark(){
|
||||
console.log("汪汪汪")
|
||||
},
|
||||
paqiang(){
|
||||
console.log(this)
|
||||
console.log("我能爬墙")
|
||||
}
|
||||
}
|
||||
|
||||
// 大喵需要借用大汪的paqiang的技能
|
||||
dog.paqiang.call(cat)
|
||||
dog.paqiang()
|
||||
|
||||
//让别人用自己的技能
|
||||
dog.paqiang.call(cat)
|
||||
paqiang 是dog有的技能
|
||||
this指向也变成猫了
|
||||
```
|
||||
|
||||
### apply
|
||||
apply 的作用和call 是完全一样的都是改变this的指向
|
||||
语法: B.方法名.apply(A,[n,m...])
|
||||
这个方法本来是B拥有的,方法中的this 指向的也是B
|
||||
执行完这句apply 之后, 方法中的this 指向A
|
||||
所以说A用了这个方法
|
||||
上面的问题也可以用下面的方式解决:
|
||||
```
|
||||
var cat={
|
||||
name:"大喵",
|
||||
run:function(){
|
||||
console.log("我会跑")
|
||||
},
|
||||
eat(){
|
||||
console.log("我在吃东西")
|
||||
}
|
||||
};
|
||||
|
||||
var dog={
|
||||
name:"大汪",
|
||||
bark(){
|
||||
console.log("汪汪汪")
|
||||
},
|
||||
paqiang(m,n){
|
||||
console.log(this)
|
||||
console.log(m,n,"我能爬墙")
|
||||
}
|
||||
}
|
||||
|
||||
// 大喵需要借用大汪的paqiang的技能
|
||||
// dog.paqiang.call(cat,1,2) 这是call实现的
|
||||
dog.paqiang.apply(cat,[1,2]) //这是用apply实现的
|
||||
dog.paqiang()
|
||||
|
||||
```
|
70
js/kejian/day4yubianyi.md
Normal file
70
js/kejian/day4yubianyi.md
Normal file
@ -0,0 +1,70 @@
|
||||
# 预编译
|
||||
### 预编译类型
|
||||
* 全局预编译 (GO)
|
||||
* 局部预编译 (AO)
|
||||
### 预编译发生的时间点
|
||||
* 全局预编译 发生在 整个页面加载完成
|
||||
* 局部预编译 发生在 函数执行的前一刻
|
||||
|
||||
### 预编译过程
|
||||
* GO:
|
||||
1.先找变量和函数声明 赋值为undefined
|
||||
2.扫描执行后 变量赋值
|
||||
3.寻找函数声明 并把函数体赋给函数
|
||||
4.执行
|
||||
* AO
|
||||
1.先找变量和形参
|
||||
2.实参和形参相统一
|
||||
3.寻找函数声明 并把函数体赋给函数
|
||||
4.执行
|
||||
函数表达式会在实参和形参相统一的步骤中完成赋值
|
||||
|
||||
```
|
||||
function a (val) {
|
||||
var name = val
|
||||
// c=0 这里的c是全局变量 window.c 能访问到
|
||||
function b () {}
|
||||
var d=function(){} //d是一个函数表达式
|
||||
}
|
||||
var str = 'Hello World'
|
||||
a(1)
|
||||
```
|
||||
|
||||
分析:
|
||||
GO:
|
||||
1.找变量和函数声明 (a,str) 并赋值为Undefined
|
||||
Go{
|
||||
a:undefined,
|
||||
str:undefined
|
||||
}
|
||||
2.执行的过程中 变量赋值
|
||||
GO{
|
||||
a:undefined
|
||||
str:"hello world"
|
||||
}
|
||||
3.找函数声明
|
||||
GO{
|
||||
a:function(){}
|
||||
str:"hello world"
|
||||
}
|
||||
|
||||
Ao:
|
||||
1.先找变量和形参
|
||||
AO{
|
||||
val:undefined,
|
||||
name:undefined,
|
||||
d:undefined
|
||||
}
|
||||
2.实参和形参相统一
|
||||
AO{
|
||||
val:1,
|
||||
name:1,
|
||||
d:function(){}
|
||||
}
|
||||
3.寻找函数声明 并把函数体赋给函数
|
||||
AO{
|
||||
val:1,
|
||||
name:1,
|
||||
b:function(){},
|
||||
d:function(){}
|
||||
}
|
59
js/kejian/day5.md
Normal file
59
js/kejian/day5.md
Normal file
@ -0,0 +1,59 @@
|
||||
# 作用域
|
||||
定义:教我们怎么查变量值的一套规则
|
||||
分类:
|
||||
* 函数作用域:
|
||||
在函数体范围内形成的作用域
|
||||
* 块级作用域
|
||||
在if else, for,while...等代码块范围内形成的作用域
|
||||
|
||||
demo:
|
||||
函数作用域:
|
||||
```
|
||||
var value = 1;
|
||||
|
||||
function foo() {
|
||||
console.log(value);
|
||||
}
|
||||
|
||||
function bar() {
|
||||
var value = 2;
|
||||
foo();
|
||||
}
|
||||
|
||||
bar(); // 1
|
||||
```
|
||||
bar执行时 会调用foo函数,foo输出了value 但是 foo函数中没有value 所以就在函数内找不到 之后会去上层作用域找value
|
||||
foo 函数的上层作用域是window(全局对象) window中有一个value 并且值为1
|
||||
|
||||
|
||||
demo2 块级作用域
|
||||
```
|
||||
var foo = true;
|
||||
if (foo) {
|
||||
let bar = foo * 2;
|
||||
bar = something( bar );
|
||||
console.log( bar ); //2
|
||||
}
|
||||
console.log( bar ); //报错
|
||||
```
|
||||
报错是因为 bar被let定义,{}里面的空间属于if的块级作用域,被let 定义的变量只能在块级作用域范围内访问 所以这里,在if代码块外部不能访问到bar 然后就会报错了
|
||||
|
||||
|
||||
|
||||
### 立即执行函数
|
||||
语法:
|
||||
(function(){
|
||||
...函数体内要执行的操作
|
||||
})()
|
||||
注:() 里面可以写匿名函数 也可以写函数声明
|
||||
如:
|
||||
(function funname(){
|
||||
...函数体内要执行的操作
|
||||
})()
|
||||
|
||||
demo:
|
||||
```
|
||||
(function (){
|
||||
console.log('bling')
|
||||
})()
|
||||
```
|
91
js/kejian/jsinfo - 副本.md
Normal file
91
js/kejian/jsinfo - 副本.md
Normal file
@ -0,0 +1,91 @@
|
||||
# js info
|
||||
### 预编译
|
||||
链接:
|
||||
* https://juejin.cn/post/6916046341131599879
|
||||
* https://juejin.cn/post/6896445621273083912
|
||||
demo1:
|
||||
```
|
||||
function f() {
|
||||
console.log(aa); // undefined
|
||||
var aa = 5;
|
||||
console.log(aa); // 5
|
||||
}
|
||||
f();
|
||||
```
|
||||
demo2:
|
||||
```
|
||||
var scope = 'global';
|
||||
function t() {
|
||||
console.log(scope); // undefined
|
||||
var scope = 'local';
|
||||
console.log(scope); // local
|
||||
}
|
||||
t();
|
||||
console.log(scope); // global
|
||||
|
||||
```
|
||||
|
||||
demo3:
|
||||
```
|
||||
console.log(b) //undefined 变量提升
|
||||
var b =2;
|
||||
```
|
||||
|
||||
demo4
|
||||
```
|
||||
console.log(foo)
|
||||
function foo(){
|
||||
|
||||
}
|
||||
var foo =1
|
||||
```
|
||||
|
||||
|
||||
### 作用域
|
||||
|
||||
demo1:
|
||||
```
|
||||
function zxxFn () {
|
||||
zxxs = 2
|
||||
}
|
||||
var zxx = 1
|
||||
console.log(window.zxx) // 1
|
||||
// console.log(zxxs) 未定义
|
||||
zxxFn() // 执行后zxxs成为全局变量
|
||||
console.log(zxxs) // 2
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
var zxx = 'zxx is a good girl'
|
||||
function zxxFn () {
|
||||
console.log(zxx)
|
||||
var zxx = 'zxx is a great girl'
|
||||
console.log(zxx)
|
||||
zxx = 'very good'
|
||||
console.log(zxx)
|
||||
}
|
||||
console.log(zxx)
|
||||
zxxFn()
|
||||
console.log(zxx)
|
||||
// 依次输出 1. zxx is a good girl 2. undefined 3. zxx is a great girl
|
||||
// 4. very good 5.zxx is a good girl
|
||||
```
|
||||
|
||||
```
|
||||
zxxAge = 'zxx is 18 years old'
|
||||
function zxxFn () {
|
||||
console.log(zxxAge)
|
||||
var zxxAge = 'zxx is 8 years old'
|
||||
var zxxSub = 'zxx is 25 years old'
|
||||
console.log(zxxAge) // zxx is 8 years old
|
||||
// console.log(zxxSub) // zxxSub is not defined
|
||||
function zxxFnSub () {
|
||||
var zxxSub = 'zxx is 18 years old'
|
||||
console.log(zxxSub) // zxx is 18 years old
|
||||
console.log(zxxAge) // zxxSub is not defined
|
||||
}
|
||||
zxxFnSub()
|
||||
}
|
||||
zxxFn()
|
||||
```
|
91
js/kejian/yubianyilx.md
Normal file
91
js/kejian/yubianyilx.md
Normal file
@ -0,0 +1,91 @@
|
||||
# js info
|
||||
### 预编译
|
||||
链接:
|
||||
* https://juejin.cn/post/6916046341131599879
|
||||
* https://juejin.cn/post/6896445621273083912
|
||||
demo1:
|
||||
```
|
||||
function f() {
|
||||
console.log(aa); // undefined
|
||||
var aa = 5;
|
||||
console.log(aa); // 5
|
||||
}
|
||||
f();
|
||||
```
|
||||
demo2:
|
||||
```
|
||||
var scope = 'global';
|
||||
function t() {
|
||||
console.log(scope); // undefined
|
||||
var scope = 'local';
|
||||
console.log(scope); // local
|
||||
}
|
||||
t();
|
||||
console.log(scope); // global
|
||||
|
||||
```
|
||||
|
||||
demo3:
|
||||
```
|
||||
console.log(b) //undefined 变量提升
|
||||
var b =2;
|
||||
```
|
||||
|
||||
demo4
|
||||
```
|
||||
console.log(foo)
|
||||
function foo(){
|
||||
|
||||
}
|
||||
var foo =1
|
||||
```
|
||||
|
||||
|
||||
### 作用域
|
||||
|
||||
demo1:
|
||||
```
|
||||
function zxxFn () {
|
||||
zxxs = 2
|
||||
}
|
||||
var zxx = 1
|
||||
console.log(window.zxx) // 1
|
||||
// console.log(zxxs) 未定义
|
||||
zxxFn() // 执行后zxxs成为全局变量
|
||||
console.log(zxxs) // 2
|
||||
|
||||
```
|
||||
|
||||
```
|
||||
var zxx = 'zxx is a good girl'
|
||||
function zxxFn () {
|
||||
console.log(zxx)
|
||||
var zxx = 'zxx is a great girl'
|
||||
console.log(zxx)
|
||||
zxx = 'very good'
|
||||
console.log(zxx)
|
||||
}
|
||||
console.log(zxx)
|
||||
zxxFn()
|
||||
console.log(zxx)
|
||||
// 依次输出 1. zxx is a good girl 2. undefined 3. zxx is a great girl
|
||||
// 4. very good 5.zxx is a good girl
|
||||
```
|
||||
|
||||
```
|
||||
zxxAge = 'zxx is 18 years old'
|
||||
function zxxFn () {
|
||||
console.log(zxxAge)
|
||||
var zxxAge = 'zxx is 8 years old'
|
||||
var zxxSub = 'zxx is 25 years old'
|
||||
console.log(zxxAge) // zxx is 8 years old
|
||||
// console.log(zxxSub) // zxxSub is not defined
|
||||
function zxxFnSub () {
|
||||
var zxxSub = 'zxx is 18 years old'
|
||||
console.log(zxxSub) // zxx is 18 years old
|
||||
console.log(zxxAge) // zxxSub is not defined
|
||||
}
|
||||
zxxFnSub()
|
||||
}
|
||||
zxxFn()
|
||||
```
|
Loading…
Reference in New Issue
Block a user