预编译/this指向

2021-04-06

1.预编译

案例:

function fn(a, c) {
console. log(a)  //function a() { }
vara=123
console. log(a) //123
console. log(c) //function c() { }
function a() { }
if (false) {
vard=678
}
console. log(d)  //undefined
console. log(b) //undefined
var b=function(){}
console. log( b) //function () { }
function c() { }
console. log(c) //function c() { }
}
fn(1, 2)

预编译阶段:作用域的创建阶段
预编译的时候做了什么事情?
1.创建了ao对象

AO{}

2.找形参和变量的声明 作为ao对象的属性名 值是undefined

AO{
a: undefined
c: undefined
d:undefined
b:undefined
}

3.实参和形参相统一

AO{
a: undefined  1 
c: undefined  2
d:undefined
b:undefined
}

4.找函数声明,会覆盖变量的声明,预编译结束

AO{
a: undefined  1 function a() { }
c: undefined  2 function c() { }
d:undefined
b:undefined
}

2.this指向

2.1 在函数中直接使用

function get(content) {
  console.log(content);  //你好
}
get('你好')

//get.call(window, '你好')

2.2 函数作为对象的方法被调用(谁调用我 我指向谁)

var person = {
  name: '张三',
  run: function (time) {
    console.log('${this.name{}在跑步,最多${time}min');
  }
}
person.run()
// person.run.call(person,30)

你可能感兴趣的:(预编译/this指向)