vue.config.js的modules改为requireModuleExtension不加载样式
把modules: false改成requireModuleExtension: true
把modules: false改成requireModuleExtension: true
不管在任何时候箭头函数都指向当前function的this指针,如果当前没有function,就指向windows
参考:
https://zhuanlan.zhihu.com/p/38997000 一句话记住js箭头函数的this
https://es6.ruanyifeng.com/#docs/function#%E7%AE%AD%E5%A4%B4%E5%87%BD%E6%95%B0 函数的拓展
call的本质是改变this指针
对象的this是自身
函数的this是全局windows
call和apply和bind只有参数不同的区别
以及bind返回的是函数
闭包简而言之就是通过作用域链逐步访问来获取变量
防止其他函数操控变量来导致代码混乱
function foo(){
var local = 1
function bar(){
local++
return local
}
return bar
}
var func = foo()
func()
首先从var func = foo()开始执行
作用链类似于C语言的堆栈
从全局->foo->bar
在bar中查找local,因为bar中并没有local所以进入foo查找,找到了local并自增,然后返回local
for (var i = 1; i <= 5; i++) {
setTimeout(function timer() {
debugger;
console.log(i); // 输出什么?
}, 1000);
}
这里的代码输出了6 6 6 6 6
全局->for的块级->然后开始设置setTimeout,因为setTimeout是一个异步的代码,1s后执行for已经执行完了,所以会访问for执行后的var i变量
如果想改变有以下方式
for (let i = 1; i <= 5; i++) {
setTimeout(function timer() {
debugger;
console.log(i); // 1 2 3 4 5
}, 1000);
}
因为let有块作用域,所以变成了
全局->for的每个let块作用域->然后开始设置setTimeout
所以获得了每个let块作用域的i
for (var i = 1; i <= 5; i++) {
(function (i) {
setTimeout(function timer() {
debugger;
console.log(i);
}, 1000);
})(i)
}
这里用了立即执行函数,变成了全局->立即执行函数作用域->然后开始设置setTimeout
关于销毁问题(仅为个人理解可能存在问题)
普通函数在执行后会自动回收内存
而闭包不会自动回收变量
这个原因可能是作用域链上存在一个类似引数计数器的东西,防止变量被回收销毁
vertical-align垂直居中
border-radius半径
box-shadow阴影
box-sizing border-box忽略padding
flex:1平分
float也可以,但是会导致没有高度,需要清除浮动,会导致元素自动成为块状元素
-webkit-box-sizing:border-box去除边框宽度
first-child第一个
last-child最后一个
ntd-child中间第几个