总结:
-
函数式编程其实是一种编程思想,它追求更细的粒度,将应用拆分成一组组极小的单元函数,组合调用操作数据流;
-
它提倡着 纯函数 / 函数复合 / 数据不可变, 谨慎对待函数内的 状态共享 / 依赖外部 / 副作用;
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
Tips:
其实我们很难也不需要在面试过程中去完美地阐述出整套思想,这里也只是浅尝辄止,一些个人理解而已。博主也是初级小菜鸟,停留在表面而已,只求对大家能有所帮助,轻喷🤣;
我个人觉得: 这些编程范式之间,其实并不矛盾,各有各的 优劣势。
理解和学习它们的理念与优势,合理地 设计融合,将优秀的软件编程思想用于提升我们应用;
所有设计思想,最终的目标一定是使我们的应用更加 解耦颗粒化、易拓展、易测试、高复用,开发更为高效和安全;
main.styl
里面定义了两个变量,我们想象的是,在所有的 .vue
文件中都可以使用 main.styl
中的变量。
但现实的情况是:并没有生效。
二、还有一种情况是:在 main.js
中 import "@/style/main.styl"
;我们期望的结果是:项目中的每个 .vue
文件 style
里面可以直接使用 main.styl
里面定义的变量。
但现实的情况是:并没有生效。
难受啊≧ ﹏ ≦
那么、如何配置 stylus
的全局变量使用方式
====================================================================
定义一个 css
变量文件:variable.styl
,在你想要使用 css
变量的文件中,引入它。 【简单、易用】
但是如果使用频率很高的话,你可能不喜欢这种方式。
====================================================================
在 vue-cli2
的模版中:
// webpack.config.js
plugins: [
new webpack.LoaderOptionsPlugin({
options: {
stylus: {
import: [path.resolve(__dirname, ‘…/src/stylus/main.styl’)]
}
}
})
]
在 vue-cli3
及以上版本的脚手架模版中:
// vue.config.js
var path = require(‘path’);
module.exports = {
css: {
loaderOptions: {
stylus: {
import: [path.resolve(__dirname, “src/stylus/main.styl”)]
}
}
}
}
====================================================================
借助于配置文件
build/utils.js
解决该问题
// 在generateLoaders方法的后面!后面!后面!(说三遍呀!)定义如下变量
const stylusOptions = {
import: [
path.join(__dirname, “…/src/styls/main.styl”)
]
}
// 在紧接着的return返回值中进行配置
JavaScript
-
js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
-
如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
-
Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
-
JS常见的dom操作api
-
解释一下事件冒泡和事件捕获
-
事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
-
对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
-
this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
-
call,apply,bind
-
显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
-
创建对象的多种方式
-
实现继承的多种方式和优缺点
-
new 一个对象具体做了什么
-
手写Ajax,XMLHttpRequest
-
变量提升
-
举例说明一个匿名函数的典型用例
-
指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
-
attribute和property的区别
-
document load和document DOMContentLoaded两个事件的区别
-
JS代码调试