1. 为什么let声明的变量在window中无法获取?
① ES5和ES6声明的变量的区别
|
ES5 |
ES6 |
| 变量声明 |
var function |
let const import class |
| 顶层对象window |
顶层对象 <=> 全局对象 |
全局变量和顶层对象的属性分离 |
let len = 10
function fn() {
console.info(this.len)
}
fn() // undefined
let Person = {
len: 5,
say: function() {
fn() // undefined
arguments[0]() // undefined
},
say2: function() {
console.info(this.len) // 5
arguments[0]() // undefined
}
}
Person.say(fn)
Person.say2(fn)
var len = 10
function fn() {
console.info(this.len)
}
fn() // 10
let Person = {
len: 5,
say: function() {
fn() // 10
arguments[0]() // undefined
}
}
Person.say(fn)
② this指向
| 调用方式 |
栗子 |
this指向 |
| 普通函数调用 |
f() |
window 严格模式undefined |
| 对象方法调用 |
o.f() |
o 指向当前的对象 |
| 构造函数调用 |
new f() |
当前的实例对象 |
| 函数上下文 |
call apply bind |
第一个参数 |
2. 怎么引入一个公共组件?封装要注意什么?
- 引入可以用
require.context()自动引入某文件夹下面的组件
- 封装要考虑通用性(复用性),参数的输入输出
3. 要优化一个组件的话,怎么做才不会影响到以前引用过这个组件的代码?
- 优化组件要做到兼容前面的功能,如果有单元测试,跑一下单元测试,单元测试就是为了防止影响以前的代码。